首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >unicode/utf-8/utf-16与我的本地代码GBK之间有什么关系?

unicode/utf-8/utf-16与我的本地代码GBK之间有什么关系?
EN

Stack Overflow用户
提问于 2013-08-25 06:50:52
回答 1查看 2.4K关注 0票数 4

我已经注意到,我在Windows上的文本文件(中文版本),当端口到Ubuntu时,变成了乱码。经过更多的研究,我知道Windows版本上的默认编码是GBK,而在Ubuntu上是utf-8,iconv可以执行代码转换,例如从GBK到utf-8:

代码语言:javascript
复制
iconv -f gbk -t utf-8 input.txt > output.txt

但我仍然对这些编码的关系感到困惑。他们是什么?它们之间有什么相似之处?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的尺寸增益不是很大。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18426498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档