我正在尝试获取和解析一个在线excel文档,它是用希伯来语编写的,但不幸的是,它是用非希伯来语编码的。
作为示例,我尝试使用C#代码将以下字符串"âìéåï_1“转换为希伯来语:”C#“,作为第一个工作表名称,但我无法这样做。
我知道上面的内容是可转换的,因为当我在NotePad++中打开它并选择编码/字符集/希伯来语/Windows1255时,我可以看到:"גליון_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时,字符串保持不变...
我可能做错了什么,有人知道如何正确转换上面的代码吗?
谢谢,
米奇
发布于 2011-08-30 06:27:35
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个字符转换为'?‘。
https://stackoverflow.com/questions/7236550
复制相似问题