Кодировка UTF8 в C#
От: Kum  
Дата: 13.05.05 11:27
Оценка:
Народ, что-то совсем запутался...
Пишу IRC клиента, но наткнулся на проблему с кодировкой.
Читаю поток в буфер
byte[] data;

Далее пытаюсь перевести в строку
_inputLine = _inputLine + new UTF8Encoding(true).GetString(data,0,i);

Но русских букв как небыло, так и нет
Может кто-нибудь поможет?
Re: Кодировка UTF8 в C#
От: ussr  
Дата: 13.05.05 11:50
Оценка:
Здравствуйте, Kum, Вы писали:

Kum>Далее пытаюсь перевести в строку

Kum>
Kum>_inputLine = _inputLine + new UTF8Encoding(true).GetString(data,0,i);
Kum>

Kum>Но русских букв как небыло, так и нет
Kum>Может кто-нибудь поможет?

а) при работе с потоками нельзя пересоздавать объект Encoding — возможно, вы еще не дочитали символ (он занимает несколько байт) до конца, енкодер его не перевел в строку — ждет продолжения
честно говоря, забыл как надо делать и посмотреть сейчас негде. по-моему в MSDN был пример как работать ИМЕННО в такой ситуации

б) _inputLine — какого типа, не string случайно???
Re: Кодировка UTF8 в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.05 12:03
Оценка:
Здравствуйте, Kum, Вы писали:

Kum>Народ, что-то совсем запутался...

Kum>Пишу IRC клиента, но наткнулся на проблему с кодировкой.
Kum>Читаю поток в буфер
Kum>
Kum>byte[] data;
Kum>

Kum>Далее пытаюсь перевести в строку
Kum>
Kum>_inputLine = _inputLine + new UTF8Encoding(true).GetString(data,0,i);
Kum>

Kum>Но русских букв как небыло, так и нет
Kum>Может кто-нибудь поможет?

А там точно UTF-8? В коде вроде явных ошибок нет.
... << RSDN@Home 1.1.4 beta 7 rev. 453>>
AVK Blog
Re[2]: Кодировка UTF8 в C#
От: Kum  
Дата: 13.05.05 12:06
Оценка:
Здравствуйте, ussr, Вы писали:

U>а) при работе с потоками нельзя пересоздавать объект Encoding — возможно, вы еще не дочитали символ (он занимает несколько байт) до конца, енкодер его не перевел в строку — ждет продолжения

U>честно говоря, забыл как надо делать и посмотреть сейчас негде. по-моему в MSDN был пример как работать ИМЕННО в такой ситуации

U>б) _inputLine — какого типа, не string случайно???


_inputLine — string. Какой должен быть тип?
Re: Кодировка UTF8 в C#
От: Козьма Прутков Россия  
Дата: 13.05.05 12:09
Оценка:
Kum wrote:
> Но русских букв как небыло, так и нет

а что есть? Вот что если взять и перевести этот массив байт в строку в
кодировке 1251? Хорошо бы результат этого сюда положить.
Posted via RSDN NNTP Server 2.0 beta
Да хранит вас господь в сухом прохладном месте...
Re[3]: Кодировка UTF8 в C#
От: Аноним  
Дата: 13.05.05 12:15
Оценка:
Здравствуйте!
U>>б) _inputLine — какого типа, не string случайно???

Kum>_inputLine — string. Какой должен быть тип?


Должно быть char[], и читать по байтам.
Исходник вечером положу (дома есть, почтовика делал...)
Re[2]: Кодировка UTF8 в C#
От: Kum  
Дата: 13.05.05 12:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А там точно UTF-8? В коде вроде явных ошибок нет.

Вроде точно.
в
reader.CurrentEncoding.EncodingName

UTF8
Re[3]: Кодировка UTF8 в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.05 12:44
Оценка:
Здравствуйте, Kum, Вы писали:

AVK>>А там точно UTF-8? В коде вроде явных ошибок нет.

Kum>Вроде точно.
Kum>в
Kum>
Kum>reader.CurrentEncoding.EncodingName
Kum>

Kum>UTF8

А кто такой reader?
... << RSDN@Home 1.1.4 beta 7 rev. 453>>
AVK Blog
Re[2]: Кодировка UTF8 в C#
От: Kum  
Дата: 13.05.05 12:48
Оценка:
Здравствуйте, Козьма Прутков, Вы писали:

КП>Kum wrote:

>> Но русских букв как небыло, так и нет

КП>а что есть? Вот что если взять и перевести этот массив байт в строку в

КП>кодировке 1251? Хорошо бы результат этого сюда положить.

Так в этом то и проблема. Не получается перевести
Читаю из потока в
char[] data

Отсылаю себе сообщение с русскими буквами.
Читаю в цикле полученное сообщение
d = (char)reader.Read();
data[i++] = d;

После прохождения цикла в дебагере смотрю data. — нет русских букв.
Вот что получил на сообщение : тест. После [59] символа должно идти слово. А там только 13 10
[0] 58 ':' char
[1] 75 'K' char
[2] 117 'u' char
[3] 109 'm' char
[4] 33 '!' char
[5] 118 'v' char
[6] 105 'i' char
[7] 114 'r' char
[8] 99 'c' char
[9] 117 'u' char
[10] 115 's' char
[11] 101 'e' char
[12] 114 'r' char
[13] 64 '@' char
[14] 108 'l' char
[15] 101 'e' char
[16] 97 'a' char
[17] 115 's' char
[18] 101 'e' char
[19] 100 'd' char
[20] 45 '-' char
[21] 108 'l' char
[22] 105 'i' char
[23] 110 'n' char
[24] 101 'e' char
[25] 45 '-' char
[26] 50 '2' char
[27] 50 '2' char
[28] 52 '4' char
[29] 45 '-' char
[30] 49 '1' char
[31] 50 '2' char
[32] 51 '3' char
[33] 46 '.' char
[34] 116 't' char
[35] 101 'e' char
[36] 108 'l' char
[37] 101 'e' char
[38] 99 'c' char
[39] 111 'o' char
[40] 109 'm' char
[41] 46 '.' char
[42] 98 'b' char
[43] 121 'y' char
[44] 32 ' ' char
[45] 80 'P' char
[46] 82 'R' char
[47] 73 'I' char
[48] 86 'V' char
[49] 77 'M' char
[50] 83 'S' char
[51] 71 'G' char
[52] 32 ' ' char
[53] 86 'V' char
[54] 111 'o' char
[55] 118 'v' char
[56] 97 'a' char
[57] 110 'n' char
[58] 32 ' ' char
[59] 58 ':' char
[60] 13 '' char
[61] 10 '' char
[62] 0 '' char
Re[4]: Кодировка UTF8 в C#
От: Kum  
Дата: 13.05.05 12:50
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Kum, Вы писали:



AVK>А кто такой reader?



private NetworkStream stream;
reader = new StreamReader(stream);
Re[3]: Кодировка UTF8 в C#
От: Козьма Прутков Россия  
Дата: 13.05.05 12:59
Оценка:
Kum wrote:
> Отсылаю себе сообщение с русскими буквами.
> Читаю в цикле полученное сообщение
>
> d = (char)reader.Read();
> data[i++] = d;
>


так поток кончился, при чем тут кодировка-то? Можешь вызвать
reader.ReadBytes(1024) и посмотреть полный массив байт (он будет меньше
1024, в противном случае увеличь эту цифру)? Тока именно байт, не
переводя в чары, строки и прочую ересь. 16-ричное представление сюда.
Posted via RSDN NNTP Server 2.0 beta
Да хранит вас господь в сухом прохладном месте...
Re[5]: Кодировка UTF8 в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.05 13:00
Оценка:
Здравствуйте, Kum, Вы писали:

AVK>>А кто такой reader?


Kum>
Kum>private NetworkStream stream;
Kum>reader = new StreamReader(stream);
Kum>


Ну и? Неужели не видишь косяка? Тогда еще раз повторяю вопрос — ты уверен что сервер отдает данные в кодировке UTF8? Что написано в документации к серверу или протоколу?
... << RSDN@Home 1.1.4 beta 7 rev. 453>>
AVK Blog
Re[4]: Кодировка UTF8 в C#
От: Аноним  
Дата: 16.05.05 07:07
Оценка:
Здравствуйте, Козьма Прутков, Вы писали:

КП>так поток кончился, при чем тут кодировка-то? Можешь вызвать

КП>reader.ReadBytes(1024) и посмотреть полный массив байт (он будет меньше
КП>1024, в противном случае увеличь эту цифру)? Тока именно байт, не
КП>переводя в чары, строки и прочую ересь. 16-ричное представление сюда.
В общем перепробовал все кодировки. UTF7 хоть что-то похожее на символы. Но русских все-равно нет.
С остальными полный бред.
Когда
reader = new StreamReader(stream,System.Text.Encoding.UTF7);

отправил себе слово "привет" с [0x3c]. Вначале идет системная информация
Re[5]: Кодировка UTF8 в C#
От: Козьма Прутков Россия  
Дата: 16.05.05 07:19
Оценка:
wrote:
>
> reader = new StreamReader(stream,System.Text.Encoding.UTF7);
>

> отправил себе слово "привет" с [0x3c]. Вначале идет системная информация
byte[] bytes = {0xef, 0xf0, 0xe8, 0xe2, 0xe5, 0xf2};
Console.WriteLine(Encoding.GetEncoding(1251).GetString(bytes));


привет
Press any key to continue


Поробуй дать ридеру кодировку Encoding.GetEncoding(1251).
Posted via RSDN NNTP Server 2.0 beta
Да хранит вас господь в сухом прохладном месте...
Re[5]: Кодировка UTF8 в C#
От: Kum  
Дата: 16.05.05 07:20
Оценка:
Все. Всем спасибо.
Поборол тем, что поставил
reader = new StreamReader(stream,System.Text.Encoding.Default);

При получении данных убрал всякое кодирование. Получаю как есть. И все покатило.
Re[6]: Кодировка UTF8 в C#
От: Nikolay_P_I  
Дата: 16.05.05 11:44
Оценка: 1 (1) +1
Здравствуйте, Kum, Вы писали:

Kum>Поборол тем, что поставил

Kum>
Kum>reader = new StreamReader(stream,System.Text.Encoding.Default);
Kum>

Kum>При получении данных убрал всякое кодирование. Получаю как есть. И все покатило.

Ничуть. Ты оставил системное, а, поскольку локаль у тебя, небось, русская — она будет эквивалентна GetEncoding(1251).

То есть — текст у тебя исходный, как и говорили — не в UTF-8, а в виндовой кодировке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.