1
我听说在Unicode和SHIFT_JIS代码之间存在(曾经是?)模糊的映射。 This KB article有点证明了这一点。在SHIFT_JIS和Unicode编码之间转换是否有问题?
所以问题是:如果我将SHIFT_JIS编码的文本转换为Unicode并将其转换回来,我会丢失任何数据吗?
细节:我在谈论Windows(XP和以上)和.NET(理论上它依赖于NLS API)。
我听说在Unicode和SHIFT_JIS代码之间存在(曾经是?)模糊的映射。 This KB article有点证明了这一点。在SHIFT_JIS和Unicode编码之间转换是否有问题?
所以问题是:如果我将SHIFT_JIS编码的文本转换为Unicode并将其转换回来,我会丢失任何数据吗?
细节:我在谈论Windows(XP和以上)和.NET(理论上它依赖于NLS API)。
是的,它看起来像这样也会损失数据:
using System;
using System.Text;
class Test
{
static void Main(string[] args)
{
Encoding shiftJis = Encoding.GetEncoding(932);
byte[] original = new byte[] { 0x87, 0x90 };
string text = shiftJis.GetString(original);
byte[] backAgain = shiftJis.GetBytes(text);
Console.WriteLine("{0:x}{1:x}", backAgain[0], backAgain[1]);
}
}
这将打印81E0,通过你链接到页面的预测。