TextBox и однобайтовые кодировки
От: dima11221122  
Дата: 21.02.11 11:01
Оценка:
здравствуйте. У меня такой вопрос. Есть программа с графичекским интерфейсом, среда VC++ Express Edition 2008. Нужно переконвертировать строку, которую мы считываем из TextBox, в ASCII (или ANSII). при попытке переконвертировать таким способом:
Код C++


Encoding^ convKey=Encoding::ASCII;
Encoding^ convKey2=Encoding::UTF8;
array<Byte>^unicodeBytes = convKey2->GetBytes(InKey);
array<unsigned char>^ k=Encoding::Convert(convKey2, convKey, unicodeBytes);



в массиве k вместо символов кириллицы стоят знаки вопроса. Латиница переводится нормально. Я так понимаю, что он не может переконвертировать строку. Помогите, почему такое случается, если получится, дайте рабочий код. Заранее благодарю.
кодировки visual c++ 2008 express edition textbox
Re: TextBox и однобайтовые кодировки
От: Codechanger Россия  
Дата: 21.02.11 11:11
Оценка:
Здравствуйте, dima11221122, Вы писали:

D>здравствуйте. У меня такой вопрос. Есть программа с графичекским интерфейсом, среда VC++ Express Edition 2008. Нужно переконвертировать строку, которую мы считываем из TextBox, в ASCII (или ANSII). при попытке переконвертировать таким способом:

D>Код C++

D>

D>Encoding^ convKey=Encoding::ASCII;
D>Encoding^ convKey2=Encoding::UTF8;
D>array<Byte>^unicodeBytes = convKey2->GetBytes(InKey);
D>array<unsigned char>^ k=Encoding::Convert(convKey2, convKey, unicodeBytes);
D>



D>в массиве k вместо символов кириллицы стоят знаки вопроса. Латиница переводится нормально. Я так понимаю, что он не может переконвертировать строку. Помогите, почему такое случается, если получится, дайте рабочий код. Заранее благодарю.


Encoding.GetBytes курите. Все строчки в .net хранятся в юникоде. Вам надо взять строку, и с помощью метода GetBytes нужной кодировки получить представление строки в байтах для данной кодировки. Ну а дальше берется этот массив байт и преобразуется в строку с помощью Encoding.GetString.
Re[2]: TextBox и однобайтовые кодировки
От: dima11221122  
Дата: 21.02.11 11:15
Оценка:
Здравствуйте, Codechanger, Вы писали:

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


D>>здравствуйте. У меня такой вопрос. Есть программа с графичекским интерфейсом, среда VC++ Express Edition 2008. Нужно переконвертировать строку, которую мы считываем из TextBox, в ASCII (или ANSII). при попытке переконвертировать таким способом:

D>>Код C++

D>>

D>>Encoding^ convKey=Encoding::ASCII;
D>>Encoding^ convKey2=Encoding::UTF8;
D>>array<Byte>^unicodeBytes = convKey2->GetBytes(InKey);
D>>array<unsigned char>^ k=Encoding::Convert(convKey2, convKey, unicodeBytes);
D>>



D>>в массиве k вместо символов кириллицы стоят знаки вопроса. Латиница переводится нормально. Я так понимаю, что он не может переконвертировать строку. Помогите, почему такое случается, если получится, дайте рабочий код. Заранее благодарю.


C>Encoding.GetBytes курите. Все строчки в .net хранятся в юникоде. Вам надо взять строку, и с помощью метода GetBytes нужной кодировки получить представление строки в байтах для данной кодировки. Ну а дальше берется этот массив байт и преобразуется в строку с помощью Encoding.GetString.


А разве в моем примере не это реализовано?
Re[3]: TextBox и однобайтовые кодировки
От: Codechanger Россия  
Дата: 21.02.11 14:45
Оценка:
D>А разве в моем примере не это реализовано?

Нет. Вы получаете массив байтов для юникодной строки. А надо массив байт ASCII.

array<Byte>^unicodeBytes = convKey1->GetBytes(InKey);

Выделено жирным, как по идее должно быть. Т.е. вы должны вызывать метод той кодировки, к которой хотите преобразовать строку.
Re[4]: TextBox и однобайтовые кодировки
От: dima11221122  
Дата: 21.02.11 20:39
Оценка:
Здравствуйте, Codechanger, Вы писали:

D>>А разве в моем примере не это реализовано?


C>Нет. Вы получаете массив байтов для юникодной строки. А надо массив байт ASCII.


C>array<Byte>^unicodeBytes = convKey1->GetBytes(InKey);


C>Выделено жирным, как по идее должно быть. Т.е. вы должны вызывать метод той кодировки, к которой хотите преобразовать строку.


Если вы имеете ввиду вот это:

Encoding^ convKey=Encoding::ASCII;
array<Byte>^unicodeBytes = convKey->GetBytes(InKey);

то оно тоже не работает. Вопросики вместо кириллицы выводятся по-прежнему((
Re[5]: TextBox и однобайтовые кодировки
От: Nikolay_P_I  
Дата: 22.02.11 05:29
Оценка:
D>Если вы имеете ввиду вот это:

D>Encoding^ convKey=Encoding::ASCII;

D>array<Byte>^unicodeBytes = convKey->GetBytes(InKey);

D>то оно тоже не работает. Вопросики вместо кириллицы выводятся по-прежнему((


У вас в textbox строка уже в UNICODE, а не в UTF8.

Более того — каких таких "русских буковок" вы хотите в семибитной кодировке ASCII ?

Вообщем — сначала разберитесь чего вам надо и зачем.
Re[6]: TextBox и однобайтовые кодировки
От: Codechanger Россия  
Дата: 22.02.11 07:28
Оценка: :)
Здравствуйте, Nikolay_P_I, Вы писали:

D>>Если вы имеете ввиду вот это:


D>>Encoding^ convKey=Encoding::ASCII;

D>>array<Byte>^unicodeBytes = convKey->GetBytes(InKey);

D>>то оно тоже не работает. Вопросики вместо кириллицы выводятся по-прежнему((


N_P>У вас в textbox строка уже в UNICODE, а не в UTF8.


N_P>Более того — каких таких "русских буковок" вы хотите в семибитной кодировке ASCII ?


N_P>Вообщем — сначала разберитесь чего вам надо и зачем.


Кстати, да. скорее всего вам 866-я кодовая страница нужна. Или, упаси господи, KOI8-R
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.