代码之家  ›  专栏  ›  技术社区  ›  Michael Borgwardt

UTF-8到底有多普遍?

  •  16
  • Michael Borgwardt  · 技术社区  · 15 年前

    在www或其他网站上,非英语文本使用UTF-8的范围有多广?我对统计数据和特定国家的情况都感兴趣。

    我知道ISO-8859-1(或15)在德国是根深蒂固的——但是对于像日本或中国这样必须使用多字节编码的语言呢?我知道几年前,日本仍然使用各种JIS编码,几乎是唯一的。

    考虑到这些观察,UTF-8是最常见的多字节编码是真的吗?或者更准确地说,它基本上只在专门针对国际市场的新应用程序中使用,或者必须使用多语言文本?现在有一个只在输出中使用UTF-8的应用程序是可以接受的,还是每个国家市场都希望输出文件采用不同的传统编码,以便被其他应用程序使用?

    编辑: 我不是在问UTF-8是否有用,为什么有用,或者它是如何工作的。我知道这一切。我在问它是否真的被广泛采用并取代了旧的编码。

    13 回复  |  直到 14 年前
        1
  •  9
  •   dan04    14 年前
        2
  •  15
  •   marc_s    15 年前

    我们在面向服务的Web服务世界中几乎只使用UTF-8——即使使用“just”西欧语言,也有足够的“怪癖”来使用各种ISO-8859-X格式来让我们的大脑旋转——UTF-8确实完全解决了这一问题。

    所以我放了一个 大的 投票支持在任何地方和任何时候使用UTF-8!-我想在面向服务的世界中,在.NET和Java环境中,这不再是一个问题或潜在的问题。

    它只解决了这么多问题,你真的不需要一直处理……

    马克

        3
  •  5
  •   Jon Bright    15 年前

    我不认为只接受UTF-8是可以接受的——你需要接受UTF-8以及你的目标市场以前流行的任何编码。

    好消息是,如果你来自一个德国人的环境,那里你主要有8859-1/15和ASCII,另外接受8859-1并将其转换成UTF-8基本上是零成本的。很容易检测到:例如,使用8859-1编码的_¶或_¼是无效的UTF-8,甚至不需要进入容易检测到的无效对。使用字符128-159不太可能是有效的8859-1。在第一个高字节的几个字节内,您通常可以非常、非常好地了解使用哪种编码。一旦你知道了编码,不管是通过规范还是猜测,你不需要一个转换表来将8859-1转换成Unicode-U+0080到U+00FF,这与8859-1中的0x80-0FF完全相同。

        4
  •  5
  •   Andrei Андрей Листочкин    14 年前

    我倾向于参观 Runet 网站经常出现。他们中的许多人仍在使用 Windows-1251 编码。它也是yandex mail和mail.ru(独联体国家中最大的两个网络邮件服务)中的默认编码。当从俄罗斯IP地址下载时,它也被设置为Opera浏览器中的默认内容编码(在该地区流行的火狐之后排在第二位)。不过,我不太确定其他浏览器。

    原因很简单:UTF-8需要两个字节来编码西里尔字母。非Unicode编码只需要1个字节(不像大多数东部字母,西里尔字母非常小)。它们的长度是固定的,并且很容易被只使用ASCII的旧工具处理。

        5
  •  4
  •   Jonik    15 年前

    现在可以接受有一个 应用程序中只使用UTF-8 产出,或者每个国家的市场 期望输出文件位于 不同的传统编码,以便 可被其他应用程序使用。

    嗯,这取决于我们说的是什么样的应用程序和输出…在许多情况下(例如大多数基于Web的东西),您当然只能使用UTF-8,但是,例如,在一个允许用户以纯文本文件保存某些数据的桌面应用程序中,我认为只有UTF-8是 够了。

    Mac OS X广泛使用UTF-8,它是用户文件的默认编码,大多数情况下都是这样的。主要的Linux发行版也是。但是在窗户上…Windows-1252(关闭但与ISO-8859-1不同)仍然是许多语言的默认编码吗?至少在Windows XP中是这样,但我不确定这是否发生了变化?在任何情况下,只要大量(主要是Windows)用户的计算机上的文件编码为Windows-1252(或类似的东西),支持UTF-8只会给许多人带来悲伤和困惑。

    一些特定于国家的信息:在芬兰,ISO-8859-1(或15)也同样根深蒂固。例如,芬兰的IRC频道使用的是afaik,大部分还是拉丁语-1。(这意味着使用基于文本的客户机(如irssi)将utf-8作为系统默认值的Linux用户需要做一些变通/调整设置。)

        6
  •  3
  •   Stephen C    14 年前

    以下是我能找到的一些统计数据:

    这两个页面似乎都有重大问题:

    • 目前还不清楚它们的样本集有多具有代表性,特别是对于非英语国家。
    • 目前还不清楚用什么方法来收集统计数据。他们是在计算页面数还是访问页面数?可下载/下载的内容呢?

    更重要的是,统计数据只针对可访问Web的内容。似乎无法获得更广泛的统计数据(例如,对用户硬盘上的文档进行编码)。(考虑到在许多国家进行所需的研究有多困难/成本高昂,这并不让我感到惊讶。)

    简言之,你的问题不能客观地回答。您也许可以在某个地方找到有关仅使用UTF-8的应用程序在特定国家的“可接受”程度的研究,但我找不到任何研究。

    对于我来说,一个好主意就是编写不区分字符编码的应用程序,并让用户决定用于存储文档的字符编码。在Java和C语言等现代语言中,这是比较容易做到的。

        7
  •  3
  •   John Machin Santi    14 年前

    CJK字符的用户自然倾向于使用UTF-8,因为他们的字符变成了3个字节,而不是2个字节。显然,在中国,首选的是自己的2字节GBK编码,而不是UTF-16。

    编辑 @joshua对此评论的回应是:

    而且对于大多数Web工作来说,不管怎样,页面都将以UTF-8的形式变小,因为HTML和JavaScript字符现在编码为一个字节。

    回应:

    GB.+编码和其他东亚编码是可变长度编码。值高达0x7f的字节主要映射到ASCII(有时会有较小的变化)。高位集的一些字节是2到4字节序列的前导字节,其他字节是非法的。就像UTF-8一样。

    由于“html和javascript字符”也是ASCII字符,因此无论是在编码还是在UTF-8中,它们始终是1字节。

        8
  •  2
  •   Bob77    15 年前

    UTF-8很流行,因为它通常比UTF-16更紧凑,具有完全的保真度。它也不受UTF-16的无结尾问题的影响。

    这使得它成为交换格式的一个很好的选择,但是因为字符编码为不同的字节运行(每个字符从一个字节到四个字节),所以使用它并不总是很好。因此,为数据交换保留UTF-8并在入口和出口点使用转换通常更为简单。

    对于系统内部存储(包括磁盘文件和数据库),使用本地UTF-16、带有其他压缩的UTF-16或一些8位“ansi”编码可能会更干净。当然,后者会将您限制在一个特定的代码页,如果您处理多语言文本,则可能会受到影响。对于本地处理数据,您可能需要一些“ansi”编码或原生utf-16。字符处理成为 许多的 这样更简单的问题。

    所以我建议使用UTF-8 外部的 但内部比较少见。除了静态文本块之外,在内部使用UTF-8似乎是一场噩梦。

    有些DBMS似乎总是选择将文本块存储为UTF-8。这提供了压缩(比存储UTF-16)的优势,而不需要尝试设计另一种压缩方案。因为转换到/从UTF-8转换非常常见,所以它们可能会利用已知的高效、可靠工作的系统库。

    “ansi”方案的最大问题是绑定到单个小字符集,并且需要为具有大字母的语言处理多字节字符集序列。

        9
  •  2
  •   Einstein    15 年前

    虽然它没有专门解决这个问题——UTF-8是所有IETF跟踪协议中强制实现的唯一字符编码。

    http://www.ietf.org/rfc/rfc2277.txt

        10
  •  2
  •   Community CDub    7 年前

    你可能对 this 问题。我一直在尝试构建一个关于支持各种语言的Unicode的CW。

        11
  •  2
  •   Sam    14 年前

    我对统计学都感兴趣 数据和具体情况 国家。

    在W3Techs上,我们有所有这些数据,但可能不容易找到:

    例如,通过首先选择语言:内容语言>日语,然后选择分段>字符编码,可以获得日语网站的字符编码分布。您将看到本报告: Distribution of character encodings among websites that use Japanese . 你看:日本的网站使用49%的shift-jis和38%的utf-8。你可以对每个顶级域名做同样的操作,比如说所有.jp站点。

        12
  •  1
  •   Randolpho    15 年前

    Java和C语言都在内部使用UTF 16,并且可以很容易地转换成其他编码;它们在企业界根深蒂固。

    我想说,现在只接受UTF作为输入没什么大不了的,去做吧。

        13
  •  1
  •   Pieter    15 年前

    我对统计学都感兴趣 数据和具体情况 国家。

    我认为这更取决于问题域及其历史,然后取决于使用应用程序的国家。

    如果您正在构建一个应用程序,您的所有竞争对手都在为其输出,例如ISO-8859-1(或在过去10年的大部分时间内),我认为您的所有(潜在)客户都希望您能够轻松地打开这些文件。

    也就是说,我认为大多数时候除了UTF-8编码文件外,还不需要输出任何东西。现在大多数项目都能应付,但YMMV又一次取决于你的目标市场。