是否有任何不尊重 ASCII 的字符集?

Posted

技术标签:

【中文标题】是否有任何不尊重 ASCII 的字符集?【英文标题】:Are there any character sets that don't respect ASCII? 【发布时间】:2017-08-20 03:00:24 【问题描述】:

据我了解,字符编码将位映射为整数,而字符集将整数映射为字符。

所以在 Unicode 字符集中有一个电话字符。它使用整数 9742 表示,更常用的十六进制表示为 260E。然后使用 UTF-8 将其保存到一个文件中,它将整数 9742 转换为 10011000001110。如果我错了,请纠正我。

昨天我创建了一个使用 Unicode 字符集和 UTF-8 编码的文本文件,并将它保存到我的桌面。然后我在我的文本编辑器中重新打开了该文件,并开始手动切换字符集以获得乐趣。不出所料,开始显示问题和奇怪的字符!我注意到只有一些字符被歪曲了。这让我想,为什么只有一些字符会坏掉?为什么不是全部?

有人告诉我,中断的字符是原始 ASCII 规范之外的字符。仔细想想,这似乎是有道理的,因为只有非美国字符会中断。有人告诉我,因为所有字符集都使用前 128 个字符的 ASCII 字符集,所以它们将保持不中断,而中断的是 127 以上的字符。如果我错了,请纠正我。

最后,我开始思考了。如果有,它们叫什么,它们是做什么用的?

【问题讨论】:

首先是 UTF-16,其中每个 BMP 代码点是两个字节,而不是一个。然后EBCDIC... 谷歌“EBCDIC”。 另见Baudot and ITA2。 顺便说一句,UTF-8 中的字符 U+260E 不是 2 个字节而是 3 个:mothereff.in/utf-8#%E2%98%8E。在 UTF-16 中是 2 个字节。 另见cp1026。我曾经遇到过这个错误作为电子邮件的字符集,它破坏了我的电子邮件解析器,因为它使用0x25 而不是0xA 来表示LF,但它在0x00 - 0x7F 范围内还有一堆其他字符不同于 ASCII。 【参考方案1】:

根据我对 cme​​ts 的调查结果,我能够回答我自己的问题。感谢所有评论的人!

是的,有一对; EBCDIC 和 Baudot。

【讨论】:

EBCDIC 最近去过那里 - 很高兴您不必处理 IBM 大型机文件 :) 顺便说一句,答案是什么?许多字符集似乎“允许”较低字节范围内的 ascii 兼容性。您的回答是否涉及到这一点?文件头呢?还有什么可以分享的吗?

以上是关于是否有任何不尊重 ASCII 的字符集?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断字符串中是不是包含任何非 ASCII 字符?

Outlook导入联系人是否不支持非ASCII字符?

是否有一个 unicode 字符看起来像一个 ascii 字符(但不相等)?

如何检测字符串中的非 ASCII 字符?

不区分大小写的操作

HTTP URI 可以有非 ASCII 字符吗?