Utf 8 什么字符编码最适合跨国公司

Utf 8 什么字符编码最适合跨国公司,utf-8,character-encoding,utf-16,utf-32,Utf 8,Character Encoding,Utf 16,Utf 32,如果你有一个被翻译成世界上所有语言的网站,因此有一个包含所有这些翻译的数据库,那么什么字符编码是最好的?UTF-128 如果是,所有浏览器是否都理解所选的编码? 字符编码是直接实现的还是有隐藏的因素 提前感谢。是Unicode事实上的标准字符编码 UTF-8类似于UTF-16和UTF-32,因为它可以表示Unicode字符集中的每个字符。但与UTF-16和UTF-32不同,它具有向后兼容ASCII的优点。而且它的优点是避免了endianness的复杂性以及由此产生的使用字节顺序标记(byte o

如果你有一个被翻译成世界上所有语言的网站,因此有一个包含所有这些翻译的数据库,那么什么字符编码是最好的?UTF-128

如果是,所有浏览器是否都理解所选的编码? 字符编码是直接实现的还是有隐藏的因素

提前感谢。

是Unicode事实上的标准字符编码

UTF-8类似于UTF-16和UTF-32,因为它可以表示Unicode字符集中的每个字符。但与UTF-16和UTF-32不同,它具有向后兼容ASCII的优点。而且它的优点是避免了endianness的复杂性以及由此产生的使用字节顺序标记(byte order marks,BOM)的需要。由于这些和其他原因,UTF-8已成为万维网的主要字符编码,占所有网页的一半以上


没有UTF-128这样的东西。

在处理这个问题时,您需要考虑更多。 例如,您可以在UTF-8中表示中文、日文和几乎所有内容,但它将为每个此类“外来”字符使用一组转义字符,因此,由于这些额外的标记,您的数据表示可能会占用大量存储空间。你也可以看看UTF-16,它对于中文、日文等不需要转义/标记——但是,每个字符现在需要2个字节来表示;因此,如果您主要处理拉丁字符集,那么您的数据存储容量只增加了一倍,没有任何好处。还有专门用于日语的shift-jis,它比UTF-8或UTF-16更好地表示这些字符集,但是您不支持拉丁字符。
我会说,如果你知道前面你会有很多外国字符,考虑UTF 16;如果你主要处理口音和拉丁字符,使用UTF-8;如果你不使用任何拉丁字符,那么就考虑Shift JIS和Apple。

< P>如果你想支持多种语言的Web内容,你应该使用一个覆盖整个Unicode范围的编码。这方面的最佳选择是UTF-8。UTF-8是web的首选编码;发件人:

鼓励作者使用UTF-8。一致性检查器可能会建议作者不要使用传统编码。[RFC3629]

对于新创建的文档,创作工具应默认使用UTF-8。[RFC3629]

UTF-8和Windows-1252是浏览器需要支持的唯一编码,UTF-8和UTF-16是XML解析器需要支持的唯一编码。因此,UTF-8是所有东西都需要支持的唯一通用编码


以下是对Liv答案的进一步回应,而不是其本身的答案;这说明了为什么即使对于CJK内容,UTF-8也优于UTF-16

对于ASCII范围内的字符,UTF-8比UTF-16更紧凑(1字节vs 2字节)。对于ASCII范围和U+07FF(包括拉丁扩展、西里尔语、希腊语、阿拉伯语和希伯来语)之间的字符,UTF-8还使用每个字符两个字节,因此是wash。对于基本多语言平面之外的字符,UTF-8和UTF-16每个字符使用4个字节,因此这是一种清洗

UTF-16比UTF-8更有效的唯一范围是从U+07FF到U+FFFF的字符,其中包括印度字母和CJK。即使对于该范围内的许多文本,UTF-8也具有可比性,因为该文本的标记(HTML、XML、RTF或其他)都在ASCII范围内,UTF-8的大小是UTF-16的一半

例如,如果我选择一个日语的随机网页,即nhk.or.jp的主页,它将以UTF-8编码。如果我将其转码为UTF-16,它的大小几乎是原来的两倍:

$ curl -o nhk.html 'http://www.nhk.or.jp/' $ iconv -f UTF-8 -t UTF-16 nhk.html > nhk.16.html $ ls -al nhk* -rw-r--r-- 1 lambda lambda 32416 Mar 13 13:06 nhk.16.html -rw-r--r-- 1 lambda lambda 18337 Mar 13 13:04 nhk.html $curl-o nhk.html'http://www.nhk.or.jp/' $iconv-f UTF-8-t UTF-16 nhk.html>nhk.16.html $ls-al-nhk* -rw-r--r--1 lambda lambda 32416 Mar 13:06 nhk.16.html -rw-r--r--1 lambda lambda 18337 Mar 13 13:04 nhk.html UTF-8几乎在所有方面都比UTF-16好。这两种编码都是可变宽度编码,因此具有所需的复杂性。然而,在UTF-16中,4字节字符是相当少见的,因此更容易做出固定宽度的假设,并使所有内容都正常工作,直到遇到一个您无法理解的情况。这种混淆的一个例子可以在编码CESU-8中看到,这是如果您将UTF-16文本转换为UTF-8,只需将代理项对的每一半编码为一个单独的字符(每个字符使用6个字节;在UTF-8中使用3个字节对代理项对的每一半进行编码),而不是将该对解码为其码点并将其编码为UTF-8。这种混淆很常见,错误的编码实际上已经被标准化了,这样至少可以使坏程序进行互操作

对于绝大多数内容来说,UTF-8比UTF-16小得多,如果您关心文本的大小,压缩文本总是比选择不同的编码要好得多。UTF-8与使用以null结尾的字节序列来表示字符串的API和数据结构兼容,因此只要您的API和数据结构不关心编码或者已经可以处理其字符串中的不同编码(例如大多数C和POSIX字符串处理API),UTF-8可以很好地工作,而不必为宽字符提供一套全新的API和数据结构。UTF-16没有指定endianness,因此它让您处理endianness问题;实际上有三种不同的相关编码,UTF-16、UTF-16BE和UTF-16LE。UTF-16可以是big-endian或little-endian,因此需要指定BOM表。UTF-16BE和LE是大端和小端的版本,没有BOM表,因此您需要使用带外方法(例如内容类型HTTP头)来表示您正在使用哪个方法,但带外头是不可用的