Как конвертировать иврит (Unicode) в Ascii в C #? - PullRequest
5 голосов
/ 06 сентября 2010

Мне нужно создать какой-то текстовый файл, в котором есть цифры и буквы иврита, декодированные в 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. Я использую это слово на иврите «шалом» и получаю обратно «????» вместо результата мне нужно.

Вот метод.

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 ]

2 голосов
/ 06 сентября 2010

Возможно, вы имеете в виду ANSI, а не ASCII?

ASCII не определяет символы иврита. Однако есть некоторые кодовые страницы ANSI, такие как "windows-1255"

В этом случае вы можете рассмотреть возможность просмотра: http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx

Короче, где у вас есть:

Encoding.ASCII

Вы бы заменили его на:

Encoding.GetEncoding(1255)
2 голосов
/ 06 сентября 2010

Вы не можете просто перевести произвольные символы Юникода в ASCII. Лучшее, что он может сделать, это отбросить неподдерживаемые символы, поэтому ????. Очевидно, что основные 7-битные символы будут работать, но не более того. Мне интересно, каков ожидаемый результат?

Если вам это нужно для передачи (а не представления), вы можете рассмотреть кодирование base-64 базовых байтов UTF8.

1 голос
/ 07 ноября 2013

Я только что столкнулся с той же проблемой, когда исходный XML-файл был в кодировке ASCII.

Как предложил Userx

Encoding.GetEncoding (1255)

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

Так что теперь мой файл XDocument может читать иврит, даже если файл xml был сохранен как ASCII

1 голос
/ 06 сентября 2010

Возможно, вы спрашиваете о транслитерации (как в " Romanization ") вместо преобразования кодирования, если вы действительно говорите об ASCII?

...