我已经注意到,我在Windows上的文本文件(中文版本),当端口到Ubuntu时,变成了乱码。经过更多的研究,我知道Windows版本上的默认编码是GBK,而在Ubuntu上是utf-8,iconv可以执行代码转换,例如从GBK到utf-8:
iconv -f gbk -t utf-8 input.txt > output.txt但我仍然对这些编码的关系感到困惑。他们是什么?它们之间有什么相似之处?
发布于 2013-08-25 08:16:49
首先,它不是关于操作系统,而是关于你用来读取文件的程序。
在普通的.txt上,程序必须能够猜出编码,这并不总是可能的,但可能会工作。在html上,编码是元数据,所以浏览器不需要这样做。
第二,你知道ASCII吗?你知道它是如何通过数字来表示符号的吗?如果不是,这是您现在就应该学的第一件事。
接下来,你看到Unicode和UTF-XXX之间的区别了吗?你必须清楚,Unicode只是数字(代码点)到符号(包括汉字、ASCII字符、埃及字符等)的映射。
另一方面,UTF-XXX表示,给定一个字节串,它们代表哪些Unicode数字(代码点)。因此,UTF-8和UTF-16是不同的有效表示Unicode的方法.
正如您可能想象的那样,与ASCII不同,UTF和GBK必须允许每个字符超过一个字节,因为其中有超过256个字节。
在GBK中,所有字符都被编码为1或2个字节。由于GBK是专门用于中文的,所以它平均使用的字节比UTF-XXX来表示给定的中文文本要少,对于其他语言则使用更多的字节。
在UTF-8和16中,每个字形的字节数是可变的,因此您必须查看用于中文代码点的字节数。
在Unicode中,汉字在以下范围上。然后你必须看看UTF-8和UTF-16代表这些范围的效率。
根据维基百科关于UTF-8和UTF-16的文章,第一个也是最常见的汉字符号4E00-9FFF用UTF-8表示为2或3字节,而在UTF-16中表示为2字节。因此,如果你要使用大量的中文,UTF-16可能更有效率。您还必须查看其他范围,以查看每个字符使用了多少字节。
对于可移植性,最好的选择是UTF,因为UTF可以表示几乎任何可能的字符集,所以更有可能是观众已经被编程来正确解码它。GBK的尺寸增益不是很大。
https://stackoverflow.com/questions/18426498
复制相似问题