0x9d在什么8位字符集中有意义?

问题描述 投票:0回答:5

在英语的 8 位类似 ASCII 字符集中,

0x9d
有意义吗? 我正在清理一些旧的数据文件,偶尔会在其他 ASCII 文本中发现
0x9d
。 (不,这不是 UTF-8。)

它在 Windows-1252 中无效。 Python“latin-1”编解码器将其转换为 Unicode 0x9D,即“操作系统命令”。这没什么意义。在 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 位代码有这些?

python string unicode utf-8 character-encoding
5个回答
11
投票

处理此数据的一些先前(确实损坏)的系统尝试将每个字符写入 UTF-8,但实际上只写入每个序列的最后一个字节(也许它在某处有一个奇怪的单字节长缓冲区)。或者,它过去是 UTF-8 格式的,但有人以不同的编码查看它,进行了搜索和替换以删除字节 0xE2 0x80,因为它们显然“不属于”并且没有意识到剩余的“ “特殊角色”也不是他们想要的。

ASCII 当然会被传递,因为它的 UTF-8 编码将是一个字节长。

“右单引号”(U+2019)

采用 UTF-8 编码,字节为 0xE2 0x80 0x99。那些有

\x99s
的地方让我走上了这条路,因为在流行的文字处理软件中,s 之前的撇号通常会被翻译成右弯引号。如果只保存了字符的最后一个字节,那么那里只会有 0x99。

“右双引号”(U+201D)

采用 UTF-8 编码,字节为 0xE2 0x80 0x9D。文本中的 0x9D 通常位于双引号字符串的末尾。而且,它通常紧邻常规的直双引号

"
。我想知道是否有人尝试对数据进行某种事先清理,并设法放回结束引用,但在那里留下了“奇怪的”0x9D。

正如我所说,这是一个疯狂的假设,但如果这是来自各种旧系统的数据的集合,那么很难知道它到底发生了什么。 UTF-8 的最后一个字节只是我能找到的最接近的“正常”英语编码,它在英语文本中有一些合理的内容,并且包含您正在寻找的字节。


1
投票
Windows-1256

中,\x99 是商标符号,

\x9d
是零宽度非连接符。从所列职位来看,这似乎是合理的,尽管可能是多余的。当然不乏可供尝试的“字符集”。

自动尝试猜测的一个工具是chardet

数据可能来自 DOS 文件(CP850)。


0
投票

对我来说,这个角色是一个心形表情符号。这是我唯一的怀疑,当我删除它时,它停止向我提供在尝试用 python 读取文件时遇到的 UnicodeDecodeError 错误。 使用 UTF-8 编码立即解决了问题,并且加载正常。


0
投票

我要结束这个问题,因为在询问了几个地方之后,很明显没有通用的扩展 ASCII 8 位数据编码以在这里有意义的方式使用 0x9D。


-1
投票

© www.soinside.com 2019 - 2024. All rights reserved.