解码编码错误的字符

时间:2012-03-08 03:47:49

标签: .net character-encoding itunes

很久以前我把一张中国音乐CD导入iTunes。 CD上的歌曲名称必须采用Unicode以外的编码,因为它们在iTunes中显示为一串无意义的字符。例如,对于一首歌,我看到字符串'°†'。我现在正在尝试修复歌曲名称。它已经很久了,我记不起任何歌曲的名字,甚至不记得艺术家是谁。

我不知道实际编码是什么,但我假设iTunes正试图在Unicode \ u00B0 \ u2020(小端)中显示歌曲名称。所以那会给我原始字节0xB0 0x00 0x20 0x20。因此歌曲名称可以是1或2个汉字长,具体取决于编码。

中文最常见的非Unicode编码是GB5或Big-5。所以我使用.NET中的Encoding类将字节从Big-5转换为Unicode。当我在WPF TextBlock中显示字符时,它显示为'?'和空块(垃圾)。然后我尝试了10个其他汉字编码。它们都在TextBlock中显示为垃圾。

从我所知道的问题可以在很多地方。

1。)iTunes可能在导入中丢失了一些字节 2.)0xB0 0x00 0x20 0x20可能不是原始字节
3.)iTunes做出了关于原始编码是什么的错误决定,并试图将其转换为Unicode 4.)我还没有尝试过正确的编码

可能是TextBlock不知道如何显示这些字符,但它与Unicode相当不错。我之前用它来显示中文Unicode字符。

还有其他人知道这里会发生什么吗?我的想法完全不正确吗?有没有更好的方法来解决这个问题?

修改

事实证明iTunes并未使用Unicode。在我的机器上,它似乎使用ANSI代码页。所以我使用Windows-1252解码了这些字符(编码类说的是我的默认代码页是什么),然后将它们重新编码为Big-5。这部分有效。

上面的例子并没有变成什么,只是当我看了一些其他歌曲的名字。我能够得到一些明智的东西。例如,'±I'æ'OÄÖ“y'变成'寂保龄'。你可能会注意到第2和第5个字符不是中文。所以它没有完全奏效 - 但请继续阅读。

我做了'±i'f©f'的艺术家名字,这给了我'张惠妹',他是一位真正的台湾歌手,AKA A-Mei。然后我在谷歌搜索张惠妹保龄。这就是“寂寞保龄球”的完整歌曲名称:'Lonely Bowling'。我不明白为什么这适用于某些角色而不是其他角色?有任何想法吗?我可能会使用错误的ANSI代码页吗?

0 个答案:

没有答案