Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема отображения русских символов, Помогите! 
:(
    Опции темы
alir
  Дата 19.3.2005, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Процесс такой:

1)содержимое textBox записывается в char массив ,
2)далее он преобразуется в byte массив, который передается по сети
3)после принятия из сетевого потока эти данные у клиента записываются в свой byte массив
4)потом этот полученный массив преобразуется обратно в char и передается в объект StringBuilder
5)далее этот объект преобразуется в string и выводится в textArea

но проблема такая - почему-то русские буквы передаются некорректно (т.е. в конце получаем какие-то левые символы), а вот английские буквы передаются нормально!

помогите плз!!! Подскажите в чем проблема и как ее решить!


PM MAIL ICQ   Вверх
Domestic Cat
Дата 19.3.2005, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Строки в .НЕТ - UTF-16 / UTF-8, а байт может держать только 255 символов smile


--------------------

PM   Вверх
alir
Дата 19.3.2005, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Согласен! Но как решить данную проблему?
PM MAIL ICQ   Вверх
Sardar
Дата 19.3.2005, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(Domestic @ 19.3.2005, 00:26)
Строки в .НЕТ - UTF-16 / UTF-8, а байт может держать только 255 символов

Дык всё равно это юникод, просто в UTF-8 под русские символы с флагом второго байта 2 байта на символ отсылаются. Другое дело если при отправке не к UTF-8 текст приводится, то в зависимости от кодировки текст и будет бится...

А нельзя ли самому к UTF-8 закодировать, получить байтовый массив, а затем его отправить?


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ch0bits
Дата 19.3.2005, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



У меня аналогичная проблема: smile

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 записывается "ероглифы", кодировка не определяется. smile
в richTextBox всё показывается правильно smile

Как нормально выводить русские буквы в OUT.TXT??? smile

P.S. Как в посте сделать, чтобы не убирались пробелы в начале строк?

Это сообщение отредактировал(а) Vadim999 - 19.3.2005, 17:16
PM WWW   Вверх
Domestic Cat
Дата 19.3.2005, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Код

using System;
using System.Text;
class Hello {
    public static void Main() {
        Byte[] bytes;
        String str = "Привет";
        
        UTF8Encoding utf8 = new UTF8Encoding();
        
        bytes = utf8.GetBytes(str);
        
        Console.WriteLine(
            "{0} bytes used to encode string.", bytes.Length
        );
        Console.Write("Encoded bytes: ");
        foreach (Byte b in bytes) {
            Console.Write("[{0}]", b);
        }
        Console.WriteLine("\nDecoding");
        Char[] chars = utf8.GetChars(bytes);
        foreach (Char c in chars) {
            Console.Write(c);
        }
    }
}



--------------------

PM   Вверх
Kurt
Дата 20.3.2005, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Vadim999
Твой код нормально работает, если исходный файл был в формате Unicode (специально проверил).
С "не-Unicode" твой код работать не сможет. Прочитай про методы CreateText() и OpenText().
Там сказано:
Цитата
Opens an existing UTF-8 encoded text file for reading.

(это для OpenText)
Т.е. при использовании этих методов подразумевается UTF-8.
Для других кодировок, думаю, следует работать с массивами байтов, как показал Domestic Cat



М
 
Vadim999. Пожалуйста, пользуйся тегом CODE!



--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Ch0bits
Дата 20.3.2005, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Ааа! Теперь всё ясно! smile Как дядя Билли назихерил. smile Спасибки!
PM WWW   Вверх
alir
Дата 23.3.2005, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Ура! Я нашел решение!
Дело в том, что по умолчанию стоит кодировка UTF-8 - отсюда и некорректность передачи русских символов. Т.е. надо было использовать кодировку Unicode. Делается так:
Код

//считываем из текстовой области
string s = textBox1.Text.ToString();
//объявление кодировки
Encoding enc = System.Text.Encoding.Unicode;
//запихиваем в byte массив
dataToSend = enc.GetBytes(s);


Далее (в моем случае это отправка byte массива по сетевому потоку)
на месте декодируем:
Код

//еще раз объявлем, уже в другом файле
Encoding enc = System.Text.Encoding.Unicode;
//считываем в string-переменную
string decS = enc.GetString(msg2);
//кидаем на компонент
textBox2.Text = decS;


Вот и все!
PM MAIL ICQ   Вверх
Domestic Cat
Дата 23.3.2005, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



А ты мой пример пробовал запускать?
Просто дело в том, что UTF-8 и есть Unicode...


--------------------

PM   Вверх
Kurt
Дата 24.3.2005, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Цитата
Просто дело в том, что UTF-8 и есть Unicode...


smile
Точно? Вот выдержки из MSDN.
Описание класса UnicodeEncoding:
Цитата
Represents a UTF-16 encoding of Unicode characters.


А вот UTF8Encoding:
Цитата
Represents a UTF-8 encoding of Unicode characters.


smile


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Domestic Cat
Дата 24.3.2005, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(Kurt @ 23.3.2005, 15:32)
Точно? Вот выдержки из MSDN.
Описание класса UnicodeEncoding:


Да видишь ли... UTF расшифровывается как Unicode Transformation Format... smile То есть формат для Unicode.


--------------------

PM   Вверх
alir
Дата 24.3.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
Да видишь ли... UTF расшифровывается как Unicode Transformation Format...  То есть формат для Unicode.


Вообще да, но все-таки они отличаются! Нужна была именно кодировка Unicode, а не UTF-8!
PM MAIL ICQ   Вверх
Domestic Cat
Дата 24.3.2005, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
Нужна была именно кодировка Unicode, а не UTF-8!


Неужтo UTF-8 как-то нe так русские буквы передает ?? smile


--------------------

PM   Вверх
alir
Дата 24.3.2005, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
Неужтo UTF-8 как-то нe так русские буквы передает ??

Ну сам проверял! UTF-8 стоит по умолчанию - кодирует некорректно,
ставишь Unicode - все работает! Там все дело в количестве байтов символов.
PM MAIL ICQ   Вверх
Domestic Cat
Дата 24.3.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
Ну сам проверял! UTF-8 стоит по умолчанию - кодирует некорректно,
ставишь Unicode - все работает! Там все дело в количестве байтов символов.


Ты мой код запускал? Правильно он передает или нет?


--------------------

PM   Вверх
alir
Дата 24.3.2005, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
Ты мой код запускал? Правильно он передает или нет?

Твой код не запускал. До своего додумался. Главное есть результат.
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.