2010-05-08 52 views

回答

11

“Unicode”不是编码。你可能意思是UTF-8与UTF-16(big-endian或little-endian)。对浏览器的支持真的没什么关系。任何现代浏览器都将支持这三种。您可能会发现UTF-8是数据库中空间效率最高的。

+0

实际上,在Unicode术语中,Unicode是一种编码,UTF-8和UTF-16是“转换格式”。最好意识到,与Unicode特定情况相比,“常规”编码在常见情况下的使用方式不同。 – hippietrail 2011-02-17 10:13:42

+0

@hippie,它看起来不像[Unicode词汇表](http://unicode.org/glossary/)单独定义术语“编码”。但是,我同意有不同的用途。 – 2011-02-17 22:19:40

+0

有关术语的更多详细信息,请参阅http://stackoverflow.com/questions/643694/utf-8-vs-unicode。 – 2011-08-23 19:12:53

3

UTF-8 的Unicode编码。你可能意味着你想选择UTF-8和UTF-16。

Microsoft recommends

开发人员应使用UTF-8,它们之间发送和 从浏览器接收所有 Unicode数据。

对于数据库存储,使用RDBMS更好支持的编码。或者,在其他条件相同的情况下,根据空间效率进行选择。对于英语和大多数欧洲语言而言,UTF-8较小,而对于亚洲语言而言,UTF-16往往较小。

6

UTF-8是Unicode的一种编码,它是将Unicode字符(抽象)序列表示为(具体)字节序列的一种方式。还有其他的编码,如UTF-16(它既有大端的也有小端的变体)。 UTF-8和UTF-16都可以代表Unicode中的任何字符,因此无论您选择哪种语言,都可以支持所有语言。

如果您的大部分文本都是西文语言,UTF-8会很有用,因为它仅代表一个字节中的ASCII字符,但它需要三个字节用于“外来”字母(如中文)中的许多字符。另一方面,对于所有可能遇到的字符,UTF-16使用恰好两个字节(尽管一些非常深奥的字符,那些在Unicode的“基本多语言平面”之外的字符需要四个字符)。

虽然我不推荐使用PHP开发国际软件,因为它并不真正支持Unicode。它具有一些使用Unicode编码的附加函数(请参阅multibyte string函数),但PHP核心将字符串视为字节而不是字符,因此标​​准PHP字符串函数不适合处理编码为多于一个字节。例如,如果您在包含字符“大”的UTF-8表示的字符串上调用PHP的strlen(),则它将返回3,因为该字符在UTF-8中占用三个字节,即使它只有一个字符。使用字符串分割函数(如substr())是不稳定的,因为如果在多字节字符中间分割会损坏字符串。

大多数用于Web开发的其他语言(如Java,C#和Python)都内置了对Unicode的支持,因此您可以将任意Unicode字符放入字符串中,而无需担心使用哪种编码在内存中表示它们,因为从您的角度来看,一个字符串包含字符,而不是字节。这是使用Unicode文本更安全,错误更少的方式。由于这个和其他原因(PHP并不是真的很棒的语言),我建议使用别的东西。

(我读过PHP 6将有适当的Unicode支持,但是这还不可用。)

+1

对于关于UTF- *的解释+1,阻止完全为i18n应用程序使用PHP。只要您知道在需要处理字符串时需要使用'mb_'函数,PHP对于i18n应用程序就足够了。这不应该成为或反对它的标准。 – deceze 2010-05-08 03:00:28

+2

充分,是的,但不是IMO的最佳选择。 – Wyzard 2010-05-08 05:00:59

+0

Actualy我在大3个字母中看到了一些点...因为如果你把大写入DB,你的DB就不会认为大于1 ANCII Charecter ... – Rella 2010-05-08 10:33:06

0

这是更好地使用UTF-8,因为它是指全世界所有语言的口音。 UTF-8也有扩展的规定,可以添加更多未使用或已识别的字符。我更喜欢并始终使用UTF-8及其系列。

3

Unicode是一种标准,它定义了一堆抽象字符(所谓的代码点)及其属性(是数字,是否大写等)。它还定义了某些编码(用字节表示字符的方法),UTF-8就是其中之一。有关更多详细信息,请参见Spolsky的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

我一定会用UTF-8去,它无处不在的标准,这些天,有一些不错的性能,如留在原位的所有7位ASCII字符,这意味着大多数HTML相关的功能,如htmlspecialchars能直接用于UTF-8表示,所以你不太可能留下与编码相关的安全漏洞。另外,很多PHP函数都明确地期望UTF-8字符串,并且UTF-8也比UTF-16更好地支持文本编辑器。