Windows中Notepad是一个常用工具。但编程环境中在使用时有些问题必须弄清楚。

1. 编码问题

2. 换行符问题

对于第二个问题而言其实不是Notepad的问题而是windows的问题。windows系统中换行符使用两个字符表示,即"\r\n"。 (CR+LF: Carriage Return回车 + Linefeed 换行。打印机术语的沿用,打印机确实影响了计算机很多,还有如键盘的编排为什么是这个字母顺序,也是沿用打印机的编排。扯远了。)

对于第一个问题,其实是对ANSI编码的理解更为重要。打开Notepad->文件->另存为,就会看到编码信息。如图:

Notepad默认使用ANSI编码来存储数据。

什么是ANSI?

不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。

ANSI的问题在于其依赖操作系统,不同语言系统的ANSI其对应的实际编码就不同。简体windows系统下它实际就是GBK,打开GBK的文件必然乱码。在日文windows操作系统下就是shift_JIS编码。是不是很讨厌!

图里的Unicode实际就是UTF-16编码小端优先。而Unicode Big endian就是UTF-16编码大端优先存储。Unicode只是对字符集的一个编码,但在计算机存储时就涉及一个字节存储顺序。往往使用BOM(Byte Order Marker)来指定存储顺序。文件头两个字节BOM为FF FE则为小端优先,如为FE FF则为大端优先。

而UTF-8不存在大端小端存储的问题,因为它的存储格式是固定的。UTF-16是定长的(2个字节),UFT-8则是变长的(1-4个字节)。

 

发表评论