2017年10月9日星期一

macOS下查看文本文件编码

环境:macOS 10.12.6
1、file命令

$ file qq.txt
qq.txt: ISO-8859 text, with CRLF line terminators

2、enca命令
安裝enca
$ brew install enca
$ enca /Volumes/NAS_Public/Document/qq.txt
Simplified Chinese National Standard; GB2312

3、vim
$ vi /Volumes/NAS_Public/Document/qq.txt 
:set fileencoding
  fileencoding=latin1

总体感觉enca命令反馈是最切题的。
file命令反馈,“with CRLF line terminators”,以“回车换行”断行,基本判断该文件在windows下编辑。


标签: , ,


2017年10月8日星期日

macOS下打开原生NTFS文件系统读写

目的:对移动硬盘上的NTFS文件系统进行读写
环境:macOS 10.12.6
1、diskutil list查看驱动器信息。
$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage 未命名                  499.4 GB   disk0s2
   3:                 Apple_Boot Boot OS X               650.0 MB   disk0s3

/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           +499.1 GB   disk1
                                 Logical Volume on disk0s2
                                 7B0D8B58-D2E7-428B-AD6D-A964DF93E517
                                 Unlocked Encrypted

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *160.0 GB   disk2
   1:               Windows_NTFS                         17.0 GB    disk2s1
   2:               Windows_NTFS VHD                     17.1 GB    disk2s5
   3:               Windows_NTFS                         37.8 GB    disk2s6

   4:               Windows_NTFS                         37.8 GB    disk2s7
可以看到移动硬盘上有4各NTFS分区,但NAME一项只有一个分区有,决定用文件系统 UUID实现(无LABEL)。

2、通过macOS下磁盘工具查看每个NTFS文件系统UUID。

3、编辑或创建/etc/fstab文件
$sudo nano /etc/fstab
创建内容
UUID=70050796-D911-4C5A-969E-D5B410840F53 none ntfs rw,auto,nobrowse
UUID=C594658C-DD09-47A5-9280-4FA1F8676D97 none ntfs rw,auto,nobrowse
UUID=60DBCC22-F082-49B5-85CC-140790EAC01A none ntfs rw,auto,nobrowse

UUID=8BAEF326-AB37-4EA4-B3CE-AFB90570DDA4 none ntfs rw,auto,nobrowse

“ctrl+x”保存退出,nobrowse表示默认不打开驱动器,需手动打开驱动器。
fstab文件除了用UUID标识各个驱动器,也可用LABEL标识。

4、手动在finder中打开驱动器,此时驱动器已在/Volumes下挂载,命令行下可以查看。
$cd /Volumes/Untiled
$open .

可读可写!


标签: ,


macOS下撤销文件隐藏属性

从windows拷贝过来的隐藏属性带到mac下,咋办?only one command
$chflags nohidden abc
同样,mac下将文件隐藏
$chflags hidden abc

标签:


2017年10月4日星期三

FTP中文乱码问题

基本解释:

服务器端字符集和客户端字符集不匹配。
服务器端一般采用Linux系统,而Linux系统默认采用通行全球的UTF8字符集
客户端将服务器端提供的UTF8字符集当作GBK解释自然就出现乱码了。

FTP服务器端  UTF-8      UTF-8      GB18030       GB18030
FTP客户端  UTF-8      GB-18030      UTF-8      GB18030
乱码     否      是      是      否

上表是一般规律。理论上,如果客户端能够自动识别服务器端代码页而且正确无误的化,自然不会出现乱码的现象。


下表是测试情况,

测试环境:
NAS:Dlink DNS-323,Thecus N5550
FTP Client:Filezilla



NAS FTP编码(Dlink:Client Language) Unicode/UTF-8 Unicode/UTF-8 Simplified Chinese Simplified Chinese
上传FTP字符集 UTF-8 GB18030 UTF-8 GB18030
Mac Smaba打开 正常 乱码 乱码 正常
Ubuntu Samba打开 正常 乱码 乱码 正常
FTP UTF-8查看 正常 看不到 看不到 看不到
FTP GB18030查看 正常 正常 看不到 正常


走标准化路线,全部统一到Unicode/UTF-8,省很多事。

Dlink DNS-323上的中文乱码文件,乱码情况或说怎么乱和FTP服务器编码没关系,只和Client端(FTP或Samba)语言编码有关系。

标签: ,


Unicode与UTF-8

讲历史
中国人民通过对 ASCII 编码的中文扩充改造,产生了 GB2312 编码,可以表示6000多个常用汉字。

汉字实在是太多了,包括繁体和各种字符,于是产生了 GBK 编码,它包括了 GB2312 中的编码,同时扩充了很多。

中国是个多民族国家,各个民族几乎都有自己独立的语言系统,为了表示那些字符,继续把 GBK 编码扩充为 GB18030 编码。

每个国家都像中国一样,把自己的语言编码,于是出现了各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。

终于,有个叫 ISO 的组织看不下去了。他们一起创造了一种编码 UNICODE ,这种编码非常大,大到可以容纳世界上任何一个文字和标志。所以只要电脑上有 UNICODE 这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成 UNICODE 编码就可以被其他电脑正常解释。从unicode开始,无论是半角的英文字母,还是全角的汉字,它们都是统一的”一个字符“!同时,也都是统一的”两个字节“。
由于”半角”英文符号只需要用到低8位,所以其高8位永远是0。Unicode 是一种字符集。Unicode 的学名是 "Universal Multiple-Octet Coded Character Set",简称为UCS。UCS 可以看作是 "Unicode Character Set" 的缩写。这一标准的 2 字节形式通常称作 UCS-2。然而,受制于 2 字节数量的限制,UCS-2 只能表示最多 65536 个字符。Unicode 的 4 字节形式被称为 UCS-4 或 UTF-32,能够定义 Unicode 的全部扩展,最多可定义 100 万个以上唯一字符,目前该字符集尚未填充完全。)

UNICODE 在网络传输中,出现了两个标准 UTF-8 和 UTF-16(解决unicode如何在网络上传输,UTF=UCS Transfer Format),分别每次传输 8个位和 16个位。UTF-8就是在互联网上使用最广的一种unicode的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,注意的是unicode一个中文字符占2个字节,而UTF-8一个中文字符占3个字节。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。有人产生疑问,UTF-8 既然能保存那么多文字、符号,为什么国内还有这么多使用 GBK 等编码的人?因为 UTF-8 等编码体积比较大,占电脑空间比较多,如果面向的使用人群绝大部分都是中国人,用 GBK 等编码也可以。

ucs-2对应utf-16,ucs-4对应UTF-32.UTF-8是没有对应的UCS

标签: ,


GB2312&GBK&GB18030

1 GB2312-80

GB 2312 或 GB 2312-80 是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。

GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。

对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。


GB2312对任意一个图形字符都采用两个字节表示,并对所收汉字进行了“分区”处理,每区含有94个汉字/符号,分别对应第一字节和第二字节。这种表示方式也称为区位码。

01-09区为特殊符号。
16-55区为一级汉字,按拼音排序。
56-87区为二级汉字,按部首/笔画排序。10-15区及88-94区则未有编码。
GB2312的编码范围为2121H-777EH,与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别。


GB 2312 在windows中的代码页是CP936


2 GBK

GBK即汉字内码扩展规范,K为汉语拼音 Kuo Zhan(扩展)中“扩”字的声母。英文全称Chinese Internal Code Specification。

GBK共收入21886个汉字和图形符号,包括:

GB2312中的全部汉字、非汉字符号。
BIG5中的全部汉字(但编码与BIG5不同)与ISO 10646相应的国家标准GB13000中的其它CJK汉字,以上合计20902个汉字。
其它汉字、部首、符号,共计984个。GBK向下与GB2312 完全兼容,向上支持ISO 10646国际标准,在前者向后者过渡过程中起到的承上启下的作用。

GBK 采用双字节表示,总体编码范围为8140-FEFE之间,首字节在81-FE之间,尾字节在40-FE之间,剔除XX7F一条线。GBK编码区分三部分:

汉字区 包括GBK/2:OXBOA1-F7FE, 收录GB2312汉字6763个,按原序排列;
GBK/3:OX8140-AOFE,收录CJK汉字6080个;
GBK/4:OXAA40-FEAO,收录CJK汉字和增补的汉字8160个。

图形符号区 包括GBK/1:OXA1A1-A9FE,除GB2312的符号外,还增补了其它符号
GBK/5:OXA840-A9AO,扩除非汉字区。

用户自定义区GBK区域中的空白区,用户可以自己定义字符。

GBK最初是由微软对GB2312的扩展,也就是CP936字码表 (Code Page 936)的扩展(原来的CP936和GB 2312-80一模一样),最初出现于Windows 95简体中文版中,由于Windows产品的流行和在大陆广泛被使用,中华人民共和国国家有关部门将其作为技术规范。注意GBK并非国家正式标准,只是国家技术监督局标准化司、电子工业部科技与质量监督司发布的“技术规范指导性文件”。虽然 GBK收录了所有Unicode 1.1及GB 13000.1-93之中的汉字,但是编码方式与Unicode 1.1及GB 13000.1-93不同。仅仅是GB 2312到GB 13000.1-93之间的过渡方案。GBK收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。

GBK作为对GB2312的扩展,在现在的windows系统中仍然使用代码页CP936表示,但是同样的936的代码页跟一开始的936的代码页只支持GB2312编码不同,现在的936代码页支持GBK的编码,GBK同时也向下兼容GB2312编码。


3 GB18030


GB 18030,全称:国家标准GB 18030-2005《信息技术中文编码字符集》,是中华人民共和国现时最新的内码字集,是GB 18030-2000《信息技术信息交换用汉字编码字符集基本集的扩充》的修订版。
GB 18030与GB 2312-1980完全兼容,与GBK基本兼容,支持GB 13000及Unicode的全部统一汉字,共收录汉字70244个。

与 UTF-8 相同,采用多字节编码,每个字可以由1个、2个或4个字节组成
编码空间庞大,最多可定义161万个字符。
支持中国国内少数民族的文字,不需要动用造字区。
汉字收录范围包含繁体汉字以及日韩汉字GB18030 编码是一二四字节变长编码。
单字节,其值从0到0x7F,与 ASCII 编码兼容。
双字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x40到0xFE(不包括0x7F),与 GBK标准基本兼容。
四字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x30到0x39,第三个字节从0x81到0xFE,第四个字节从0x30到0x39。


2000年的GB18030取代了GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

GB18030在windows中的代码页是CP54936。



4、 GB13000



GB13000等同于国际标准的《通用多八位编码字符集 (UCS)》 ISO10646.1,就是等同于Unicode的标准,代码页等等的都使用UTF的一套标准。



从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
那时候会编程的计算机僧侣们都要每天念下面这个咒语数百遍: “一个汉字算两个英文字符!一个汉字算两个英文字符……

以下是简体、繁体字的编码比较

GB2312编码:CEB0
BIG5编码:没有
GBK编码:CEB0
GB18030编码:CEB0
Unicode编码:4F1F


GB2312编码:没有
BIG5编码:B0B6
GBK编码:82A5
GB18030编码:82A5
Unicode编码:5049



汉字字符编码查询
http://www.qqxiuzi.cn/bianma/zifuji.php


关系:
GB 18030>GB 2312-1980>GBK

标签: , ,


This page is powered by Blogger. Isn't yours?

订阅 博文 [Atom]