代码之家  ›  专栏  ›  技术社区  ›  Paul D. Waite

对于主要包含阿拉伯语文本的网页,我应该使用什么字符编码?UTF-8行吗?

  •  13
  • Paul D. Waite  · 技术社区  · 15 年前

    对于主要包含阿拉伯语文本的网页,我应该使用什么字符编码?

    UTF-8行吗?

    5 回复  |  直到 10 年前
        1
  •  15
  •   JoeG    10 年前

    UTF-8可以存储完整的Unicode范围,因此可以用于阿拉伯语。


    但是,如果您想知道哪种编码最有效:

    所有阿拉伯字符都可以使用一个单独的UTF-16代码单元(2个字节)进行编码,但它们可能需要2或3个UTF-8代码单元(每个1个字节),因此如果您只是编码阿拉伯语,那么UTF-16将是一个更节省空间的选项。

    但是,您不仅要编码阿拉伯语—您要编码大量可以以UTF-8格式存储在单字节中的字符,还要以UTF-16格式存储两个字节;所有HTML编码字符 < , & , > , = 以及所有的HTML元素名。

    这是一种权衡,除非你要处理大量的文件,否则没关系。

        2
  •  10
  •   Paul D. Waite    13 年前

    我开发的网站大多是阿拉伯语,以下是我使用的两种编码:

    1。窗1256

    这是阿拉伯语网站最常用的编码方式。它在大多数情况下(90%)适用于阿拉伯语用户。

    以下是阿拉伯最大的Web开发论坛之一: http://traidnt.net/vb/ . 您可以看到他们正在使用这种编码。

    这种编码的问题是,如果你正在开发一个国际性的网站,这种编码不会对每个用户都有效,他们会看到胡言乱语而不是内容。

    2。UTF-8

    这种编码解决了前面的问题,也可以在URL中工作。我的意思是,如果你想在你的网址中有阿拉伯单词,你需要它们是UTF-8格式,否则它将不起作用。

    这种编码的缺点是,如果要使用这种编码将阿拉伯语内容保存到数据库(例如mysql)(因此数据库也将使用utf-8编码),那么它的大小将是使用windows-1256编码时的两倍(因此数据库将使用拉丁语1编码)。

    如果你能负担得起尺寸的增加,我建议使用UTF-8。

        3
  •  8
  •   Community CDub    8 年前

    是的,UTF-8很好。它可以对Unicode标准中的任何代码点进行编码。


    编辑添加

    为了使答案更加完整,您的实际选择是:

    • UTF-8
    • UTF 16
    • UTF 32

    每个都有权衡和优势。

    UTF-8

    AS Joe Gauterin 指出,对于欧洲文本来说,UTF-8是非常有效的,但是如果离拉丁字母表越远,效率就越低。如果您的文本都是阿拉伯语,那么它实际上将大于以UTF-16表示的等效文本。然而,在现实中,这很少是一个问题,除非您有大量的文本需要处理,否则这些天的RAM既便宜又丰富。更多的问题是,编码的可变长度使得一些字符串操作变得困难和缓慢。例如,您不能很容易地获得字符串中的第五个阿拉伯字符,因为有些字符可能是1字节长(比如标点符号),而另一些字符是两个或三个。这使得 处理 字符串速度慢且容易出错。

    另一方面,如果你要做大量的欧洲/阿拉伯混合文本,UTF-8可能是你最好的选择。文件中的欧洲文本越多,UTF-8的选择就越好。

    UTF 16

    如果您主要使用阿拉伯语文本,那么UTF-16将比UTF-8提供更好的空间效率。不过,我不知道阿拉伯语的代码点,所以我不知道这里是否存在可变长度编码的风险。(我的猜测是,这不是一个问题。)如果您确实使用了可变长度编码,那么这里也适用于utf-8的所有字符串处理问题。如果没有,没有问题。

    另一方面,如果您混合了欧洲和阿拉伯文本,那么UTF-16将降低空间利用率。此外,如果你发现自己把你的文本格式扩展到其他文本,比如中文,你肯定会回到变长格式和相关的问题。

    UTF 32

    UTF-32基本上将使您的空间需求增加一倍。另一方面,对于所有已知(可能是未知的;)脚本形式,它的大小是恒定的。对于原始字符串处理来说,它是您最快、最好的选择,而不存在可变长度编码会给您带来的问题。(这假定您有一个字符串库,当然知道32位字符。)

    推荐

    我自己的建议是,除非您 真正地 使用UTF-16查看优势大小。所以,任何时候从外部世界读取一个字符串,它都将是UTF-8,而任何时候将一个字符串放到外部世界,它也将是UTF-8。但是,在您的软件中,除非您习惯于操作大量字符串(在这种情况下,我建议您使用不同的数据结构!)我建议使用utf-16或utf-32(取决于utf-16数据中是否存在可变长度编码问题),以提高代码的速度效率和简单性。

        4
  •  2
  •   marcgg    15 年前

    UTF-8是最简单的方法,因为它可以处理几乎所有的东西:

    UTF-8可以编码任何Unicode 性格。不同的文件 语言可以正确显示 不必选择正确的 代码页或字体。例如 中文和阿拉伯语可以是一样的 未插入特殊代码的文本 切换编码。 (通过 wikipedia )

    当然要记住:

    UTF-8通常比 为一个或几个进行编码 语言。 带音调符号的拉丁文字母和 其他字母的字符 每个脚本通常占用一个字节 在适当的字符 多字节编码,但需要两个 UTF-8。东亚文字 每个字符的 多字节编码需要三个 每字符字节数(UTF-8)。

    …但在大多数情况下,这不是一个大问题。如果你开始处理巨大的文件,它就会变成一个。

        5
  •  0
  •   Ben    12 年前

    UTF-8通常比一种或几种语言的编码占用更多的空间。带有音调符号的拉丁字母和其他字母脚本中的字符在适当的多字节编码中通常每个字符一个字节,但在UTF-8中需要两个字节。东亚脚本在多字节编码中通常每个字符有两个字节,而在UTF-8中每个字符有三个字节。