如何修复损坏的日文字符编码

时间:2015-12-29 13:18:17

标签: c# character-encoding

我有以下字符串,我知道它应该显示为日文文本

25“ú‚¨“¾‚ȃAƒ‹ƒeƒBƒƒbƒgƒRƒXƒZƒbƒg‹L”O

有没有办法解码和重新编码文本,以便正确显示?我已经尝试过使用shift-jis,但它没有产生可读的字符串。

string main = "25“ú‚¨“¾‚ȃAƒ‹ƒeƒBƒƒbƒgƒRƒXƒZƒbƒg‹L”O.zip"; byte[] mainBytes = System.Text.Encoding.GetEncoding("shift-jis").GetBytes(main); string jpn = System.Text.Encoding.GetEncoding("shift-jis").GetString(mainBytes);

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为原版是Shift-JIS,但你没有说明你是如何尝试的。所以这是我尝试重新编码::

string s1 = "25“ú‚¨“¾‚ȃAƒ‹ƒeƒBƒƒbƒgƒRƒXƒZƒbƒg‹L”O";
byte[] bs = Encoding.GetEncoding(1252).GetBytes(s1);
string s2 = Encoding.GetEncoding(932).GetString(bs);

s2现在是"25日お得なアルティャbトコスセット記念",看起来更像日本人。

我假设某些表示文本Shift-JIS编码的字节数组,使用不同编码读取的内容,可能是Windows-1252。所以首先我尝试取回原始的字节数组。然后我使用正确的编码来获得正确的文本。

关于我的代码的一些注释:

  • 1252是Windows-1252的数字ID,这是最常用的错误编码。但这只是猜测,您可以尝试使用其他编码,看看它是否更有意义。
  • 932是Shift-JIS的数字ID(您也可以使用字符串名称)。这也是猜测,但可能是正确的。
  • 考虑到使用错误的编码通常不是可逆的过程,因此翻译中可能会丢失字符。