代码之家  ›  专栏  ›  技术社区  ›  eugeneK

如何将希伯来语(Unicode)转换为C中的ASCII?

  •  5
  • eugeneK  · 技术社区  · 14 年前

    我必须创建某种文本文件,其中有数字和希伯来字母解码成ASCII码。

    这是一种文件创建方法,在按钮单击时触发

    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()静态方法从.NET中的Unicode字符串转换为它的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码,而是我得到'?????'在我创建的文件中,即使运行debuger,也会得到相同的结果。

    我做错什么了?

    4 回复  |  直到 11 年前
        1
  •  2
  •   Marc Gravell    14 年前

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

    如果你需要这个 转移 (而不是表示)您可以考虑对底层utf8字节进行base-64编码。

        2
  •  2
  •   userx    14 年前

    你的意思是ANSI,而不是ASCII?

    ASCII没有定义任何希伯来语字符。但是,也有一些ANSI代码页,例如“Windows-1255”

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

    简而言之,如果你有:

    Encoding.ASCII
    

    您可以将其替换为:

    Encoding.GetEncoding(1255)
    
        3
  •  1
  •   peSHIr    14 年前

    你是不是在问 transliteration (如“ Romanization “)而不是编码转换,如果您真的在谈论ASCII?

        4
  •  1
  •   Mike Tishler    11 年前

    当原始XML文件采用ASCII编码时,我也面临同样的问题。

    如userx建议的那样

    encoding.getencoding(1255)

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

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