英语的8位类ASCII字符集0x9d
有意义吗?
我正在清理一些旧的数据文件,偶尔会在其他ASCII文本中找到0x9d
。 (不,它不是UTF-8。)
在Windows-1252中无效。 Python“latin-1”编解码器将其转换为Unicode 0x9D,即"Operating System Command"。这没什么意义。在Unicode中,您将获得一个包含[009d]的框。 (在Python中,您可以将任何内容转换为Latin-1而不会引发错误,但这并不意味着这样做是有意义的。)
使用Python类型转义的示例,来自凌乱的数据库我正在清理它结合了来自许多来源的文本:
Guitar Pro, JamPlay, RedBana\\\'s Audition,\x9d Doppleganger\x99s The Lounge\x9d or Heatwave Interactive\x99s Platinum Life Country,\\"
for example \\"I\\\'ve seen the bull run in Pamplona, Spain\x9d.\\" Everything
Netwise Depot is a \\"One Stop Web Shop\\"\x9d that provides sustainable \\"green\\"\x9d living
are looking for a \\"Do It for Me\\"\x9d solution
从背景来看,我怀疑是™或®。但那些8位代码有哪些?
答案 0 :(得分:5)
这是一个完全疯狂的假设:
处理这些数据的一些先前(真正损坏的)系统试图将每个字符写为UTF-8,但实际上只写了每个序列的最后一个字节(可能它在某处有一个奇怪的一个字节长的缓冲区)。或者,它过去是UTF-8,但有人用不同的编码查看它做了搜索和替换以删除字节0xE2 0x80,因为它们显然“不属于”并且没有意识到剩下的“特殊性格“不是他们想要的那个。
ASCII,当然会传递,因为它的UTF-8编码长一个字节。
'RIGHT SINGLE QUOTATION MARK'(U + 2019)’
以UTF-8编码,字节为0xE2 0x80 0x99。你拥有\x99s
的地方是让我沿着这条路走下去的地方,因为在s之前的撇号通常会在流行的文字处理软件中被翻译成右边的引号。如果只保存了该字符的最后一个字节,那么你只需要0x99。
'右双引号'(U + 201D)”
以UTF-8编码,字节为0xE2 0x80 0x9D。您文本中的0x9D通常位于双引号字符串的末尾。并且,它通常紧挨着常规的直线"
双引号。我想知道是否有人试图对数据进行某种先前的清理传递,并设法回到收尾报价中,但在那里留下了“奇怪的”0x9D。
正如我所说,这是一个疯狂的假设,但如果这是来自各种旧系统的数据集合,则很难知道它究竟发生了什么。 UTF-8的最后一个字节就是我能找到的最接近的“普通”英文编码,它在英文文本中会有一些合理的内容,并包含你要查找的字节。
答案 1 :(得分:1)
在用于阿拉伯语区域设置的Windows-1256中,\x99
是商标符号,\x9d
是零宽度非连接符。这似乎在列出的位置似乎是合理的,尽管可能是多余的。尽管如此,肯定不缺少character sets。
自动尝试猜测的一个工具是chardet。
答案 2 :(得分:0)
可能是来自DOS文件(CP850)的数据。
根据我在这种情况下的经验,字符0x9D被用作"直径"在提到管道或管道时签字。
答案 3 :(得分:-1)
我要关闭它,因为在几个地方询问后,很明显没有常见的扩展ASCII 8位数据编码使用0x9D,这在某种程度上是有意义的。
这可能是很久以前对数据进行修改的结果。关于Python字符集转换的其他Stack Overflow问题特别是在0x9D上失败,所以它并不是这个数据所特有的。在某个地方,偶尔会有一些东西粘在0x9D上,通常是在引号之后。也许一些旧的文字处理器。谢谢,大家。