什么代码页将'ç'编码为'?º'(0x3f 0xba)

时间:2011-03-11 14:09:26

标签: .net encoding globalization codepages

今天我收到了一个客户的文件,我必须阅读,但它包含奇怪的字符。使用已知名称,我可以猜出一些字符的含义。

例如:

Realname  | Encoded as   | sign  | hex
----------|--------------|-------|-------
Françios  | Fran?ºios    | ç     | 3f ba
André     | Andr??       | é     | 3f 3f
Hélène    | H??l?¿ne     | è     | 3f bf
etc.
  • 我尝试了所有代码页(已知为.Net)来导入文件,看看它们是否包含我所知道的单词。但是没有代码页让我满意。
  • 在Notepad ++中打开文件认为它是ANSI,并且还显示不需要的字符。 (但它有一个有用的十六进制编辑器插件。)
  • 其他文件(来自同一用户和zip文件)以UTF-8编码。

从我收到文件的那个人,我不能指望帮助。 (使用谷歌翻译)他向我明确表示他发现创建文件非常困难,他正在使用我无法访问的软件(我相信SAP)。

有没有其他方法可以找到他刚发给我的文件的编码?

2 个答案:

答案 0 :(得分:6)

如果我使用UTF-8编码的文本,假装它是CP850,然后将其转换为Latin-1Windows-1252或类似的编码,我就可以获得这些结果。 “?”来自于0xc3处的CP850字符是“├”这一事实,它在Latin-1或派生编码中不存在,因此转换将其替换为“?”。


修改:我使用iconv进行了更广泛的搜索,CP437CP862CP865的匹配程度高于CP850。既然你问过,我这次使用的单线是:

for enc in `iconv -l`; do echo -n "$enc: "; echo -n "ç é è" | iconv -s -f $enc -t "LATIN1//TRANSLIT" 2>/dev/null; echo; done

答案 1 :(得分:1)

它应该是UTF-8或UTF-16。 它们几乎包含所有常规字符。 看起来你有解码/编码问题。

notepad ++它可能会混淆,因为你的文件不使用Byte-Order-Mark。

如何处理文件?

尝试将它们作为二进制读取,然后尝试不同的编码来获取字符串。 如果您不将它们作为二进制读取,则可能会发生默认编码。

“?”是一个标志。

可能会that有所帮助。