C#Encoding.Converting Latin to Hebrew

我正在尝试获取和解析一个用希伯来语编写的在线excel文档,但不幸的是用非希伯来语编码。

作为一个例子,我正在尝试转换以下字符串:“âìéåï_1”,它使用C#代码作为希伯来语的第一个表名,但我无法这样做。

我知道上面是可转换的,因为当我在NotePad ++中打开并选择编码/字符集/希伯来语/ Windows 1255时,我可以看到:“גליון_1”这是上述字符串的正确希伯来语表示。

我正在使用以下代码

string str = "âìéåï_1"; Encoding windows = Encoding.GetEncoding("Windows-1255"); Encoding ascii = Encoding.GetEncoding("Windows-1252"); byte[] asciiBytes = ascii.GetBytes(str); byte[] windowsBytes = Encoding.Convert(ascii, windows, asciiBytes); char[] windowsChars = new char[windows.GetCharCount(windowsBytes, 0, windowsBytes.Length)]; windows.GetChars(windowsBytes, 0, windowsBytes.Length, windowsChars, 0); string windowsString = new string(windowsChars); 

我假设原始字符串的编码是Windows-1252,因为当我将它粘贴到NotePad ++并将编码更改为Windows-1252时,字符串保持不变…

我可能在这里做错了,有谁知道如何正确转换上述内容?

谢谢,

米奇

 const string Str = "âìéåï_1"; Encoding latinEncoding = Encoding.GetEncoding("Windows-1252"); Encoding hebrewEncoding = Encoding.GetEncoding("Windows-1255"); byte[] latinBytes = latinEncoding.GetBytes(Str); string hebrewString = hebrewEncoding.GetString(latinBytes); 

hebrewString:

גליון_1

在您提供的示例中,“Window-1252”不是实际的ASCII,它是扩展的ASCII,并且由于某种原因,使用这两种编码的Encoding.Convert无法转换扩展范围的ASCII,因此所有+127个字符都转换为63(即?)。 当从一个扩展的ASCII字符byte []转换到另一个时,我希望字节是相同的,只有当你将它们转换为.Net unicode字符串时我才会期望它们是不同的。 不确定为什么Convert将+127个字符Convert为’?’。