【问题标题】:How to convert hebrew (unicode) to Ascii in c#?如何在 c# 中将希伯来语(unicode)转换为 Ascii?
【发布时间】:2010-09-06 08:08:42
【问题描述】:

我必须创建某种文本文件,其中包含解码为 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,而是得到 '????'在我创建的文件中,即使我运行调试器,我也会得到相同的结果。

我做错了什么?

【问题讨论】:

  • 嗨,你是怎么解决的?我有同样的问题。需要将希伯来语 unicode(1400 ,1500 等)转换为 ASCII 码。

标签: c# unicode encoding


【解决方案1】:

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

如果您需要将其用于传输(而不是表示),您可以考虑对底层 UTF8 字节进行 base-64 编码。

【讨论】:

  • 谢谢,马克。我在示例文件中有“Œ€‹‰”这种字符,虽然它不代表“shalom”,但您会知道它是哪种编码。我不明白“转移”到 base-64 是什么意思。
  • @eugeneK - 我仍然不清楚那里的翻译是什么。我怀疑我需要查看应该相互映射的确切字节序列和字符代码点才能“点击”。
  • 我有错误的要求,这导致我首先使用 ASCII。无论如何感谢您的信息。
  • eugeneK 请发布你是如何处理的?
【解决方案2】:

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

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

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

简而言之,你有:

Encoding.ASCII

您可以将其替换为:

Encoding.GetEncoding(1255)

【讨论】:

  • 你可能是对的。我根本没有编码经验,因此我从来不知道 ASCII 不包含希伯来字符
  • @eugueK ASCII 几乎只是英文字母、0-9、基本标点符号和一些控制字符。参考:en.wikipedia.org/wiki/ASCII
  • 不,我有错误的要求,这导致我首先使用 ASCII。无论如何感谢您的信息。
【解决方案3】:

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

【讨论】:

  • 不,我有错误的要求,这导致我首先使用 ASCII。无论如何感谢您的信息。
【解决方案4】:

当原始 xml 文件采用 ASCII 编码时,我也遇到了同样的问题。

正如用户建议的那样

Encoding.GetEncoding(1255)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2011-11-22
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2011-06-09
    • 2019-01-07
    相关资源
    最近更新 更多