如何在c#中将希伯来语(unicode)转换为Ascii?

时间:2010-09-06 08:08:43

标签: c# unicode encoding

我必须创建某种文本文件,其中有数字和希伯来字母解码为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表示形式。我用术语希伯来语'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我得到相同的结果。

我做错了什么?

4 个答案:

答案 0 :(得分:2)

您不能简单地将任意unicode字符转换为ASCII。它能做的最好就是丢弃不受支持的字符,因此????。显然,基本的7位字符可以工作,但不是很多。我很好奇预期的结果是什么?

如果您需要传输(而不是表示),则可以考虑基础UTF8字节的base-64编码。

答案 1 :(得分:2)

你可能是指ANSI,而不是ASCII?

ASCII不定义任何希伯来字符。然而,有一些ANSI代码页,例如“windows-1255”

在这种情况下,您可能需要考虑: http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx

简而言之,你有:

Encoding.ASCII

您可以将其替换为:

Encoding.GetEncoding(1255)

答案 2 :(得分:1)

如果你真的在谈论ASCII,你是否可能会询问transliteration(如“Romanization”)而不是编码转换?

答案 3 :(得分:1)

当原始xml文件处于ASCII编码状态时,我刚遇到同样的问题。

正如Userx建议

  

Encoding.GetEncoding(1255)

XDocument.Parse(System.IO.File.ReadAllText(xmlPath, Encoding.GetEncoding(1255)));

所以现在我的XDocument文件可以读取希伯来语,即使xml文件保存为ASCII