无法通过 C# 将 ANSI 编码重现为 Windows-1256

Can't reproduce ANSI Encoding to Windows-1256 by C#

我在 mdb 文件中有一些编码数据,例如 Úæäí 和 ÚáÇä;我尝试使用记事本 ++,首先使用 ANSI 编码创建新文件,然后将文本放入其中,最后将编码更改为 Windows-1256,结果是 ùوني ,علان 完美,但我无法重现这个场景编码(C#)。这是代码:

public string Decode(DataRow rw,string colName)
{
   Encoding srcEnc = Encoding.GetEncoding("from what ?");
   Encoding destEnc = Encoding.GetEncoding("1256");// arabic encoding
   byte[] srcVal = rscEnc.GetBytes(rw[colName].ToString());
   byte[] destVal = Encoding.Convert(srcEnc,destEnc,srcVal);
   return destEnc.GetString(destVal);
}

问题是您在编码之间转换。这实际上并不是您要实现的目标,您只是想 重新解释 编码文本。

为此,您需要获取 ANSI 字符串的字节,然后使用正确的编码对其进行解码。

因此,忽略转换:

var latin = Encoding.GetEncoding(1252);
var bytes = latin.GetBytes("Úæäí");

var arabic = Encoding.GetEncoding(1256);            
var result = arabic.GetString(bytes);   

result 是 عوني

注意,正如 Hans 在评论中指出的那样:Windows-1252 has 5 byte values that are unused (0x81, 0x8D, 0x8F, 0x90, and 0x9D). If these correspond to characters in Windows-1256 在原始文本中使用,那么您的源数据已损坏,因为这些字符在使用 1252 进行初始解码时会丢失。理想情况下,您想从原始编码源开始。