关于不可知的语言:您是否精通Unicode?

关于不可知的语言:您是否精通Unicode?

Are you fluent in Unicode yet?

大约5年前,Joel Spolsky写了这篇文章,"绝对绝对是每个软件开发人员绝对肯定要知道的Unicode和字符集(无借口!)"。

像许多人一样,我仔细阅读了一下,意识到这是我不得不处理这种" ASCII替换"的时候了。不幸的是,五年后,我觉得我在这个领域陷入了一些坏习惯。你有吗

我没有写很多专门的国际应用程序,但是我已经帮助建立了许多面向ASP.NET Internet的网站,所以我想这不是一个借口。

因此,出于我的利益(我相信还有许多其他人),我可以从以下方面得到一些人的意见:

  • 如何一劳永逸地"克服" ASCII
  • 使用Unicode的基本指导。
  • 推荐(最新)有关Unicode的书籍和网站(面向开发人员)。
  • Unicode的当前状态(在Joels的文章发表5年后)
  • 未来发展方向。

我必须承认我具有.NET背景,因此也希望获得.NET框架中有关Unicode的信息。当然,这不应阻止具有不同背景的任何人发表评论。

更新:请参阅以前在StackOverflow上也问过的相关问题。


自从我阅读Joel文章和其他一些I18n文章以来,我始终密切关注我的字符编码。如果您坚持不懈,它实际上会起作用。如果您在标准使用UTF-8的公司工作,并且每个人都知道这一点/这样做会起作用。

这里有一些有趣的文章(除了乔尔的文章):

  • http://www.tbray.org/ongoing/When/200x/2003/04/06/Unicode
  • http://www.tbray.org/ongoing/When/200x/2003/04/26/UTF

引用第一篇文章;使用Unicode的技巧:

  • 拥抱Unicode,不要打架;这可能是正确的做法,如果不是,则可能无论如何都必须这样做。
  • 在您的软件中,将文本存储为UTF-8或UTF-16;也就是说,选择两者之一并坚持下去。
  • 尽可能使用XML与外界交换数据;这样就消除了很多潜在的问题。
  • 尝试使您的应用程序基于浏览器,而不是编写自己的客户端;浏览器在处理世界文本方面确实变得非常擅长。
  • 如果您使用的是别人的库代码(当然是这样),请假设其Unicode处理已损坏,直到证明是正确的为止。
  • 如果您要进行搜索,请尝试将语言和字符处理问题交给了解它们的人。
  • 前往亚马逊或其他地方购买印刷版Unicode标准的最新版本;它包含了您需要了解的所有内容。
  • 花一些时间在Unicode网站上闲逛,学习代码表的工作方式。
  • 如果您需要对亚洲语言进行认真的研究,请购买Ken Lunde撰写的有关该主题的O'Reilly书。
  • 如果您使用的是Macintosh,请用尽并获取Lord Pixel的Unicode字体检查工具。太酷了。
  • 如果确实需要处理数据问题,请参加每年两次的Unicode会议之一。所有的专家都去了,如果您不知道需要知道什么,那么您将能够找到在那里认识的人。

我花了一段时间使用搜索引擎软件-您不会相信有多少个网站使用HTTP标头或与网页编码有关的元标记来提供内容。通常,您甚至会获得同时包含ISO-8859字符和UTF-8字符的文档。

解决了一些此类问题后,就开始认真对待对产生的数据进行正确的字符编码。


.NET Framework使用Windows默认编码来存储字符串,事实证明该字符串为UTF-16。如果在使用大多数文本I / O类时未指定编码,则将编写不带BOM的UTF-8,并先检查BOM然后假定UTF-8进行读取(我肯定StreamReader和< x1>以此方式运行。)对于不懂BOM的"笨拙"文本编辑器来说,这是相当安全的,但对于那些可能会显示UTF-8或实际上您正在编写超出标准的字符的更聪明的文本编辑器来说,这是一种粗鲁的选择。 ASCII范围。

通常这是不可见的,但是它可以以有趣的方式抬起头。昨天我正在与一个使用XML序列化以使用StringWriter将对象序列化为字符串的人一起工作,他不知道为什么编码始终为UTF-16。由于内存中的字符串将是UTF-16,并且由.NET强制执行,因此这是XML序列化框架唯一可以做的事情。

因此,当我编写的东西不仅是一次性工具时,我会指定带有BOM的UTF-8编码。从技术上讲,在.NET中,您总是会偶然地识别Unicode,但前提是您的用户知道将您的编码检测为UTF-8。

每当我看到有人问"我如何获取字符串的字节?"时,这会让我哭泣。和建议的解决方案使用Encoding.ASCII.GetBytes() :(


经验法则:如果您从不修改或查看字符串内部,而是严格地将其视为数据块,那么您的状况会更好。

如果您想以" Unicode方式"进行操作,则即使进行拆分单词或小写字符串之类的简单操作也变得很困难。

而且,如果您要以" Unicode方式"进行操作,则需要一个非常好的库。这些东西非常复杂。


推荐阅读

    探探语言设置|探探怎么设置语言

    探探语言设置|探探怎么设置语言,,1. 探探怎么设置语言打开探探软件,然后就有消息提示的红点,点开就行了!其实这些软件都是挺简单的操作的,都是

    git设置编码|git语言设置

    git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

    区域语言设置|区域语言设置工具

    区域语言设置|区域语言设置工具,,区域语言设置工具你好,大致的方法如下,可以参考:1、按下键盘的windows 图标,再开始菜单中单击“设置”;出现的

    c4d语言设置|c4d汉语设置

    c4d语言设置|c4d汉语设置,,1. c4d汉语设置mac版的C4D是这样的,中文字体是有的,但是是以拼音的形式存在,比如黑体就是ht。中文字体以拼音方式

    电脑宣传语|电脑宣传语言

    电脑宣传语|电脑宣传语言,,1. 电脑宣传语言1.我做好了与你过一辈子的打算,也做好了你随时要走的准备,2.每段青春都会苍老,但我希望记忆里的你