Unicode,Unicode Big Endian还是UTF-8?有什么区别?哪种格式更好?


19

当我尝试在记事本中保存带有非英语文本的文本文件时,可以选择UnicodeUnicode Big EndianUTF-8之间。这些格式之间有什么区别?

假设我希望任何向后兼容性(与较旧的OS版本或应用程序兼容),并且我关心文件大小,那么以下哪种格式更好?

(假设文本除了其他语言外,还可以使用中文或日文等语言。)

注意:从下面的答案和评论看来,在记事本术语中,Unicode是UTF-16(小端),Unicode大端是UTF-16(大端),而UTF-8是UTF-8。


Answers:


19

不知道。哪个更好:锯或锤子?:-)

Unicode不是UTF

不过,文章中有些内容与手头主题更为相关:

  • UTF-8致力于最小化ASCII集中字符表示的字节大小(可变长度表示:每个字符用1到4个字节表示,而ASCII字符都用1个字节表示)。正如乔尔所说:

他们说:“看看所有这些零!”,因为他们是美国人,而且他们正在看的英文文本很少使用U + 00FF以上的代码点。他们也是加利福尼亚的自由派嬉皮士,他们想保留(冷笑)。如果它们是德州人,那么他们就不会介意将字节数增加一倍。但是那些加利福尼亚的w弱者不愿将字符串存储空间增加一倍

  • UTF-32专注于穷举和固定长度表示,所有字符均使用4个字节。这是最直接的转换,直接将Unicode代码点映射到4个字节。显然,它的尺寸效率不是很高。

  • UTF-16是一种折衷方案,大部分时间都使用2个字节,但每个字符扩展到2 * 2个字节以表示某些字符,这些字符不包括在基本多语言平面(BMP)中。

另请参阅绝对绝对肯定每个软件开发人员都必须了解Unicode和字符集(没有任何借口!)


4
问题出在Unicode是一种“编码”,而不是数字到字节的意义上。UTF-8 / 16/32都是Unicode编码,但是Unicode本身是从符号到数字的映射。我认为他们可以使用更多独特的术语来避免这种混乱。
jerryjvl

4
无论如何,对于问题的OP来说,应用程序的意思是“ UTF-16”(其上标有“ Unicode”),这是很奇怪的。
jerryjvl

3
我不确定UTF-8的目标是“保存”,而不是与ASCII向后兼容。
Shiny和New安宇

@Johannes:Unicode联盟已决定从不分配U + 10FFFF以上的代码点,因为它们无法用UTF-16表示。这具有将UTF-8限制为4个字节的效果。
user46971 2010年

1
“ Unicode不是UTF” –对于许多人来说,它是WTF;)
mlvljr 2012年

4

对于欧洲语言,UTF-8较小。对于东方语言,区别不是很明显。

两者都将处理所有可能的Unicode字符,因此兼容性应该没有差别。


3

Unicode字符编码比您想象的要多。

  • UTF 8

    UTF-8编码为可变宽度,范围为1-4个字节,每个字节的高位保留为控制位。第一个字节的前导位指示该字符使用的字节总数。字符代码点的标量值是非控制位的串联。在此表中,x代表Unicode值的最低8位,y代表下一个较高的8位,并z代表高于此的位。

    Unicode              Byte1     Byte2     Byte3     Byte4
    U+0000-U+007F       0xxxxxxx            
    U+0080-U+07FF       110yyyxx  10xxxxxx          
    U+0800-U+FFFF       1110yyyy  10yyyyxx  10xxxxxx    
    U+10000-U+10FFFF    11110zzz  10zzyyyy  10yyyyxx  10xxxxxx
    
  • UCS-16
  • UCS-16BE
  • UCS-16LE

  • UTF-16
  • UTF-16BE
  • UTF-16LE

  • UTF-32
  • UTF-32-BE

1
Unicode字符编码比列出的更多。例如UTF-1UTF-7UTF-EBCDICGB-18030MIMEUTF-9和UTF-18 …您还可以使用任何二进制编码方案来编码Unicode数据。阅读更多Unicode编码比较
phuclv 2015年

1

“ Unicode”是“ UTF-16”的另一个术语,它是将Unicode字符集编码为每个字符16位。UTF-8将其编码为每个字符八位。

在这两种情况下,任何溢出都将分配给另外16位或8位。


那么哪一个更好呢?
R. Martinho Fernandes

“这取决于实际情况。
约翰·桑德斯

尽管对于这个特定问题,似乎似乎确实滥用了“ Unicode”作为“ UTF-16”的另一个术语,但实际上并非如此-请参阅Jason的答案。
Arjan

1
您的意思是“每个代码单位”,而不是“每个字符”;UTF-8和UTF-16都可以使用多个代码单元表示一个字符。与“ Unicode”和“ UTF-16”不同,除了Microsoft术语外。
user46971 2010年

1

小文件(如文本文件)的唯一真正优势是文件大小。UTF-8通常会产生较小的文件。但是这种差异在中文/日语文本中可能不太明显。


请记住,网络带宽和内存使用情况也有所不同。
杰森·贝克

1
“ UTF-8通常会产生较小的文件”:并非如此。UTF-8为ASCII文件生成较小的文件。如果文件仅由U + 0800以上的Unicode代码点组成,则在UTF-8中将比在UTF-16中更大
sleske

0

简而言之,Unicode是一个字符集,而Unicode Big Endian和utf-8是两种编码,用于在计算机上将字符存储为01。


和不同的是...?
David Richerby
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.