如何在c#中将希伯来语(unicode)转换为Ascii?
我必须创建某种文本文件,其中有数字和希伯来字母解码为ASCII。
这是在ButtonClick上触发的文件创建方法
protected void ToFile(object sender, EventArgs e) { filename = Transactions.generateDateYMDHMS(); string path = string.Format("{0}{1}.001", Server.MapPath("~/transactions/"), filename); StreamWriter sw = new StreamWriter(path, false, Encoding.ASCII); sw.WriteLine("hello"); sw.WriteLine(Transactions.convertUTF8ASCII("שלום")); sw.WriteLine("bye"); sw.Close(); }
正如您所看到的,我使用Transactions.convertUTF8ASCII()静态方法将可能的Unicode字符串从.NET转换为ASCII表示forms。 我用术语希伯来语’shalom’然后回来’????’ 而不是我需要的结果。
这是方法。
public static string convertUTF8ASCII(string initialString) { byte[] unicodeBytes = Encoding.Unicode.GetBytes(initialString); byte[] asciiBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes); return Encoding.ASCII.GetString(asciiBytes); }
而不是将初始单词解码为ASCII我得到’????’ 在我创建的文件中即使我运行debbuger我得到相同的结果。
我做错了什么?
您不能简单地将任意unicode字符转换为ASCII。 它能做的最好就是丢弃不受支持的字符,因此????
。 显然,基本的7位字符可以工作,但不是很多。 我很好奇预期的结果是什么?
如果您需要这个用于传输 (而不是表示),您可以考虑基础UTF8字节的base-64编码。
你是说ANSI,而不是ASCII?
ASCII不定义任何希伯来字符。 然而,有一些ANSI代码页,例如“windows-1255”
在这种情况下,您可能需要考虑查看: http : //msdn.microsoft.com/en-us/library/system.text.encoding.aspx
简而言之,你有:
Encoding.ASCII
您可以将其替换为:
Encoding.GetEncoding(1255)
如果你真的在谈论ASCII,你可能会询问音译 (如“ 罗马化 ”)而不是编码转换吗?
当原始xml文件处于ASCII编码时,我只遇到了同样的问题。
正如Userx建议的那样
Encoding.GetEncoding(1255)
XDocument.Parse(System.IO.File.ReadAllText(xmlPath, Encoding.GetEncoding(1255)));
所以现在我的XDocument文件可以读取希伯来语,即使xml文件保存为ASCII