我有一个设备,其中包含一些有关如何发送文本的文档。它使用0x00-0x7F发送'特殊'字符,如重音字符,欧元符号,......
我猜他们复制了现有的代码页并进行了一些更改,但我不知道如何找出最接近我文档中的代码页的代码页。
从理论上讲,这应该很容易实现。例如,他们将Á映射到0x41,所以如果我能找到一些方法来浏览所有代码页并找到那个在该位置上具有此字符的代码页,那么这将是件小事。
但是,我在互联网上找到的所有内容都是代码页转储的链接,就像我正在查看的那样,或者使用启发式方法来阅读文本并猜测最可能的代码页的软件。当然有人在那里可以查找一个人正在查看的代码页吗?
答案 0 :(得分:4)
如果它使用0x00
到0x7F
作为“特殊”字符,它如何编码常规ASCII字符?
在大多数支持字符Á
的字符集中,其代码点为193(0xC1
)。如果从中减去128,则得到65(0x41
)。也许你的“代码页”只是ISO-8859-1或windows-1252等标准字符集之一的上半部分,高阶位设置为零而不是1(即每个字节减去128)。
如果是这种情况,我希望找到一个标志,你可以设置告诉它是否应该使用“上”或“下”编码转换下一堆代码点。我不知道任何使用该方案的系统,但对于你描述的情况,这是我可以带来的最明智的解释。
答案 1 :(得分:1)
如果没有其他信息,则无法自动检测代码页。在显示层下面,它只是字节,所有字节都是相等的。没有办法说“我是这个和那个代码页的0x41”,只有“我是0x41。显示我!“
答案 2 :(得分:1)
系统是什么结尾?也许你正在翻点订单?
答案 3 :(得分:0)
在大多数代码页中,0x41只是正常的“A”,我不认为任何standard codepages在该位置都有“Á”。它可以在添加重音的A之前的某个位置具有控制字符,或者使用非标准代码页。
我知道“最近的代码页”没有任何用处,您只需要使用设备附带的文档。
你的最后一句话令人费解,你的意思是“可以查找一个正在查看的代码页”?
如果你包含整个代码页,那么SO上的人可能会更有帮助,并且可以让你更深入地了解这个问题,有一个数据点0x41 =Á没什么用。
答案 4 :(得分:0)
有点随意的想法,但是如果您可以从设备上复制大量文本,则可以尝试通过http://chardet.feedparser.org/中的detect
函数运行它。