文本编辑器应该支持哪些常见的字符编码?

时间:2010-01-20 18:49:33

标签: unicode encoding text-editor character

我有一个文本编辑器,可以加载ASCII和Unicode文件。它通过在文件开头查找BOM和/或在前256字节中搜索字符来自动检测编码。 0x7f的。

应该支持哪些其他编码,以及哪些特性会使编码易于自动检测?

6 个答案:

答案 0 :(得分:4)

绝对是UTF-8。请参阅http://www.joelonsoftware.com/articles/Unicode.html

据我所知,没有保证可以自动检测到这种情况(尽管通过扫描可以将错误诊断的概率降低到很小的数量。)

答案 1 :(得分:3)

我不知道编码,但请确保它可以支持多种不同的行结束标准! (\ n vs \ r \ n)

如果您尚未查看Mich Kaplan的博客,我建议您这样做:http://blogs.msdn.com/michkap/

具体来说,这篇文章可能很有用:http://www.siao2.com/2007/04/22/2239345.aspx

答案 2 :(得分:1)

您无法检测编码。你能做的最好的事情就是IE,它依赖于不同语言的字母分布,以及语言的标准字符。但这至多是一个长镜头。

我建议您开始使用一些大型字符集库(查看像iconv这样的项目)并将所有这些都提供给用户。但是不要打扰自动检测。只需允许用户选择他对默认字符集的偏好,默认字符集本身就是UTF-8。

答案 3 :(得分:1)

西方用户肯定支持Latin-1(ISO-8859-1)及其Windows扩展CP-1252。有人可能会说UTF-8是一个更好的选择,但人们通常没有这种选择。中国用户需要GB-18030,并且记住还有日本人,俄罗斯人,希腊人,他们都有UTF-8编码的Unicode旁边的编码。

对于检测,大多数编码都无法安全检测到。在某些(如Latin-1)中,某些字节值只是无效。在UTF-8中,可以发生任何字节值,但不是每个字节值序列。但实际上,您不会自己进行解码,而是使用编码/解码库,尝试解码并捕获错误。那么为什么不支持这个库支持的所有编码呢?

您还可以开发启发式算法,例如解码特定编码,然后测试奇怪字符或字符组合或此类字符频率的结果。但这永远不会安全,我同意Vilx-你不应该打扰。根据我的经验,人们通常知道文件具有特定的编码,或者只有两个或三个是可能的。所以,如果他们看到你选错了,他们就可以很容易地适应。并看看其他编辑。最聪明的解决方案并不总是最好的,特别是如果人们习惯了其他程序。

答案 4 :(得分:1)

UTF-16在纯文本文件中并不常见。 UTF-8更常见,因为它与ASCII兼容,并在XML等标准中指定。

1)检查各种Unicode编码的BOM。如果找到,请使用该编码 2)如果没有BOM,检查文件文本是否有效UTF-8,读取直到达到足够的非ASCII样本(因为许多文件几乎都是ASCII但可能有一些重音字符或智能引号)或文件结束。如果有效UTF-8,请使用UTF-8 3)如果不是Unicode,它可能是当前的平台默认代码页 4)有些编码很容易检测,例如日语Shift-JIS会大量使用前缀字节0x82和0x83表示平假名和片假名。
5)如果程序的猜测结果是错误的,请给用户选择更改编码。

答案 5 :(得分:0)

无论你做什么,使用超过256个字节进行嗅探测试。正确的做法很重要,那么为什么不查看整个文档呢?或至少前100KB左右。

尝试使用UTF-8和明显的UTF-16(许多交替的0字节),然后回退到当前语言环境的ANSI代码页。