首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Encoding.Converting拉丁文到希伯来语

C# Encoding.Converting拉丁文到希伯来语
EN

Stack Overflow用户
提问于 2011-08-30 06:05:27
回答 1查看 14K关注 0票数 7

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

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

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

我正在使用下面的代码

代码语言:javascript
复制
            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时,字符串保持不变...

我可能做错了什么,有人知道如何正确转换上面的代码吗?

谢谢,

米奇

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-30 06:27:35

代码语言:javascript
复制
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个字符转换为'?‘。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7236550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档