如何在C#中将希伯来文(Unicode)转换为Ascii?

5

我需要创建一个文本文件,在其中将数字和希伯来字母解码为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字符,而是显示为'????',即使我运行调试器也得到相同的结果。

我做错了什么?


嗨,你是怎么解决的?我也有同样的问题。需要将希伯来语Unicode(1400、1500等)转换为ASCII代码。 - Michael IV
4个回答

2

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

ASCII 不定义任何希伯来字符。但有一些 ANSI 代码页,如 "windows-1255"。

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

简而言之,在您有:

Encoding.ASCII

您需要将其替换为:
Encoding.GetEncoding(1255)

你可能是正确的。我对编码毫无经验,因此我从未知道ASCII不包含希伯来字符。 - eugeneK
ASCII基本上就是英文字母、0-9数字、基本标点符号和一些控制字符。参考:http://en.wikipedia.org/wiki/ASCII - userx
不,我有一个错误的需求,这让我首先想到了ASCII。无论如何,感谢您提供的信息。 - eugeneK

2

你不能简单地将任意Unicode字符翻译成ASCII。最好的处理方式是丢弃不支持的字符,因此显示为????。显然,基本的7位字符可以正常工作,但其他字符则不行。我很想知道预期结果是什么?

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


谢谢,马克。我在示例文件中有'Œ€‹‰'这种字符,尽管它不代表'shalom',但你会了解它是什么编码。我无法理解你所说的将其“转换”为base-64的意思。 - eugeneK
@eugeneK - 对我来说,那个翻译仍然不明显。我怀疑我需要看到确切的字节序列和字符代码点,才能让它“恍然大悟”。 - Marc Gravell
我有一个要求出现了错误,导致我首先想到了ASCII。无论如何,感谢您提供的信息。 - eugeneK
EugeneK,请问你是如何处理那个问题的? - Jacob

1
我刚遇到了同样的问题,当原始的xml文件采用ASCII编码时。
正如用户x所建议的那样。

Encoding.GetEncoding(1255)

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

因此,现在我的XDocument文件可以读取希伯来语,即使xml文件保存为ASCII格式。


1

你是不是在询问音译(比如“罗马化”)而不是编码转换,如果你真的在谈论ASCII?


不,我有一个错误的需求,这让我首先想到了ASCII。无论如何,感谢您提供的信息。 - eugeneK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接