2013-02-27 11 views
0

У меня проблемы с обработкой unicode-конверсий.C++ Unicode Issue

Следующий код выводит это в мой текстовый файл. ПРИВЕТ ?? O

std::string test = "HELLO"; 
std::string output; 
int len = WideCharToMultiByte(CP_OEMCP, 0, (LPCWSTR)test.c_str(), -1, NULL, 0, NULL, NULL); 
char *buf = new char[len]; 
int len2 = WideCharToMultiByte(CP_OEMCP, 0, (LPCWSTR)test.c_str(), -1, buf, len, NULL, NULL); 
output = buf; 
std::wofstream outfile5("C:\\temp\\log11.txt"); 
outfile5 << test.c_str(); 
outfile5 << output.c_str(); 
outfile5.close(); 

Но как вы можете видеть, выход только преобразование юникода из тестовых переменных. Как это возможно?

+5

Вы пытаетесь понять, почему это не работает, когда вы говорите компилятору: «Поверьте мне, я знаю, что это LPCWSTR». когда это не так? – chris

+0

Ваш комментарий и ссылка помогли мне понять это. Как вы думаете, вы можете помочь мне в решении связанной проблемы? http://stackoverflow.com/questions/15078661/trouble-getting-footage-path-after-effects-sdk – jacobsgriffith

+0

Прочитайте раздел Windows Unicode в http://utf8everywhere.org. –

ответ

0

после прочтения этой Microsoft wstring reference

Я изменил

std::string test = "HELLO"; 

в

std::wstring test = L"HELLO"; 

И строка была выведена правильно, и я получил

HELLOHELLO

1

Проверьте, правильно ли LEN после первого измерения вызова. В общем, вам не следует бросать test.c_str() в LPCWSTR. «Тест» как есть «char'-string not» wchar_t'-wstring. Вы можете передать его в LPCSTR - обратите внимание на «W». WinAPI имеет различие между этим. Вы действительно должны использовать wstring, если вы хотите держать в нем широкоформатные шейдеры. Да, после повторного чтения кода, test должен быть wstring, тогда вы можете безопасно отнести его в LPCWSTR.

 Смежные вопросы

  • Нет связанных вопросов^_^