| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Проблема отображения русских символов |
| Автор: alir 19.3.2005, 01:20 |
| Процесс такой: 1)содержимое textBox записывается в char массив , 2)далее он преобразуется в byte массив, который передается по сети 3)после принятия из сетевого потока эти данные у клиента записываются в свой byte массив 4)потом этот полученный массив преобразуется обратно в char и передается в объект StringBuilder 5)далее этот объект преобразуется в string и выводится в textArea но проблема такая - почему-то русские буквы передаются некорректно (т.е. в конце получаем какие-то левые символы), а вот английские буквы передаются нормально! помогите плз!!! Подскажите в чем проблема и как ее решить! |
| Автор: Domestic Cat 19.3.2005, 01:26 |
| Строки в .НЕТ - UTF-16 / UTF-8, а байт может держать только 255 символов |
| Автор: alir 19.3.2005, 13:31 |
| Согласен! Но как решить данную проблему? |
| Автор: Sardar 19.3.2005, 14:59 | ||
Дык всё равно это юникод, просто в UTF-8 под русские символы с флагом второго байта 2 байта на символ отсылаются. Другое дело если при отправке не к UTF-8 текст приводится, то в зависимости от кодировки текст и будет бится... А нельзя ли самому к UTF-8 закодировать, получить байтовый массив, а затем его отправить? |
| Автор: Ch0bits 19.3.2005, 17:14 |
| У меня аналогичная проблема: private void button1_Click(object sender, System.EventArgs e) { StreamReader sr=File.OpenText(@"c:\IN.txt"); StreamWriter sw=File.CreateText(@"c:\OUT.txt"); string input; while ((input=sr.ReadLine())!=null) { richTextBox1.AppendText(input); sw.WriteLine(input); } sw.Close(); sr.Close(); } IN.TXT юникод или винд. кодировка OUT.TXT записывается "ероглифы", кодировка не определяется. в richTextBox всё показывается правильно Как нормально выводить русские буквы в OUT.TXT??? P.S. Как в посте сделать, чтобы не убирались пробелы в начале строк? |
| Автор: Domestic Cat 19.3.2005, 21:21 | ||
|
| Автор: Kurt 20.3.2005, 01:19 | ||||
| Vadim999 Твой код нормально работает, если исходный файл был в формате Unicode (специально проверил). С "не-Unicode" твой код работать не сможет. Прочитай про методы CreateText() и OpenText(). Там сказано:
(это для OpenText) Т.е. при использовании этих методов подразумевается UTF-8. Для других кодировок, думаю, следует работать с массивами байтов, как показал Domestic Cat
|
| Автор: Ch0bits 20.3.2005, 15:50 |
| Ааа! Теперь всё ясно! |
| Автор: alir 23.3.2005, 23:12 | ||||
| Ура! Я нашел решение! Дело в том, что по умолчанию стоит кодировка UTF-8 - отсюда и некорректность передачи русских символов. Т.е. надо было использовать кодировку Unicode. Делается так:
Далее (в моем случае это отправка byte массива по сетевому потоку) на месте декодируем:
Вот и все! |
| Автор: Domestic Cat 23.3.2005, 23:18 |
| А ты мой пример пробовал запускать? Просто дело в том, что UTF-8 и есть Unicode... |
| Автор: Kurt 24.3.2005, 00:32 | ||||||
Точно? Вот выдержки из MSDN. Описание класса UnicodeEncoding:
А вот UTF8Encoding:
|
| Автор: Domestic Cat 24.3.2005, 01:35 | ||
Да видишь ли... UTF расшифровывается как Unicode Transformation Format... |
| Автор: alir 24.3.2005, 15:42 | ||
Вообще да, но все-таки они отличаются! Нужна была именно кодировка Unicode, а не UTF-8! |
| Автор: Domestic Cat 24.3.2005, 19:13 | ||
Неужтo UTF-8 как-то нe так русские буквы передает ?? |
| Автор: alir 24.3.2005, 19:24 | ||
Ну сам проверял! UTF-8 стоит по умолчанию - кодирует некорректно, ставишь Unicode - все работает! Там все дело в количестве байтов символов. |
| Автор: Domestic Cat 24.3.2005, 19:28 | ||
Ты мой код запускал? Правильно он передает или нет? |
| Автор: alir 24.3.2005, 19:35 | ||
Твой код не запускал. До своего додумался. Главное есть результат. |