C # - преобразование UTF-8 в украинскую кодировку - PullRequest
1 голос
/ 08 декабря 2011

Я пытался преобразовать кодировку этой строки из utf-8 в украинский "-7-64-Ð ± иѻ.всякий раз, когда я конвертирую его из utf8 в украинский, я получаю поврежденную строку ...

правильная строка должна выглядеть как "Драйвер-для-принтера-Pixma-ip-2000-для-Windows-7-64-бит"..

пожалуйста, совет .. спасибо

РЕДАКТИРОВАТЬ: вот как я его конвертирую ..

private string EncodeUTF8toOther(string inputString, string to)
        {
            try
            {  
                // Create two different encodings.
                byte[] myBytes = Encoding.Unicode.GetBytes(inputString);

                // Perform the conversion from one encoding to the other.            
                byte[] convertedBytes = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(to), myBytes);

                return Encoding.GetEncoding("ISO-8859-1").GetString(convertedBytes);

            }
            catch
            {
                return inputString;
            }
        }

украинский набор символов" KOI8-U "

Дополнительная информация: У меня похожая проблема с этим вопросом: c # HttpWebResponse Кодировка заголовка

заголовок местоположения дает мне эту поврежденную строку.Мне нужно правильно закодировать его, чтобы выполнить перенаправление ..

Ответы [ 3 ]

1 голос
/ 08 декабря 2011

Encoding.Unicode - это UTF-16, а не UTF-8. Если вы уверены, что ваша исходная строка закодирована в UTF-8, используйте вместо нее Encoding.UTF8.

И возвращать строку не имеет никакого смысла. Строка всегда кодируется в UTF-16. Вам следует беспокоиться о кодировке только при чтении и записи вашей строки.

При чтении используйте Encoding.UTF8.GetString для создания строки UTF-16 из двоичных данных.

При записи используйте либо Encoding.GetEncoding (destinationEncoding) .GetBytes, чтобы получить двоичные данные и записать их напрямую, либо используйте перегрузку вашего конструктора StreamWriter (или любого другого объекта, который вы используете), чтобы указать кодировку.

0 голосов
/ 14 февраля 2012
"ÐÑайвеÑ-длÑ-пÑинÑеÑа-Pixma-ip-2000-длÑ-Windows-7-64-биÑ".

Уже UTF-8! Вам не нужно делать какие-либо преобразования. Просто заставьте Windows знать свой UTF-8. Что-то вроде этого сделает работу:

wb.Encoding = Encoding.UTF8;
0 голосов
/ 08 декабря 2011

Вам необходимо правильно декодировать строку при вводе, например так:

 StreamReader rdr = new StreamReader( args[0], Encoding.UTF8 );
 string str = rdr.ReadToEnd();
 rdr.Close();

Поток является физическим, и вы должны знать, в какой кодировке он находится.* Строка , с другой стороны, логична.Внутренняя кодировка, используемая для строк, вас не касается;кроме того, какие символы он может представлять;и он может представлять все символы, так как внутренняя кодировка для Unicode.(Если внутренняя кодировка была KOI-8, немецкие или французские символы не могли быть представлены.)

На выходе это , что вам снова придется беспокоиться о кодировке.1015 * Если вы не укажете кодировку на входе и выходе, предполагается платформа по умолчанию.Это может быть не то, что вы хотите.Полезно знать и указывать кодировку на входе и выходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...