【发布时间】:2014-11-14 22:15:34
【问题描述】:
我编写了一个显示提醒的程序,其中一些是西班牙语,一些是英语。英文的显示没有任何问题,但在西班牙的中,带有重音符号 [í é] 的字母显示为奇怪的符号。这是否意味着 Windows7 无法处理此字形并因此需要升级,或者 ASCII 表有误?我可以做些什么来解决这个问题?
#include <windows.h>
#include <string>
using STR_VECTOR = std::vector<std::wstring>;
...
class MyClass{
...
private: std::shared_ptr<STR_VECTOR> quote;
private: std::wstring wstr;
..
public: MyClass();
};
CPP file
~~~~~~
MyClass::MyClass(){
quote.reset(new VECTORSTR);
//... bla bla bla
quote->push_back(L"Yes, Thus is the wolf");
quote->push_back(L"Sí, así es el lobo");
//... bla bla bla
uint64_t vec_size = quote->size();
std::srand ((uint64_t)std::time(0));
quote_num = rand( ) % ( vec_size );
wstr = quote->at( quote_num );
MessageBoxEX( NULL, wstr.c_str( ), TEXT("SomeText"), MB_OK | MB_ICONINFORMATION,0 );
app.Write( );
}
【问题讨论】:
-
我已经重新打开了这个问题,因为您现在已经删除了原来的副本,但请注意,您确实应该编辑过原件,因为现在对原件有帮助的 cmets已经丢失。将来请始终更新您的原始问题,不要发布重复的问题。此外,与网站运作有关的任何问题都属于元数据,而不是您的问题。
-
将 MessageBoxEx 替换为 MessageBoxW 并重试。
-
您在同一个程序中使用
TEXT宏和L""字符串,这是不一致的。我建议对宽字符进行标准化并避免使用TCHAR宏。 -
wstr = quote->at(quote_num); MessageBoxW(NULL, wstr.c_str(), std::wstring("Un buen día").c_str(), MB_OK | MB_ICONINFORMATION);
-
字母í在MessageBoxW的文本区显示为Ã,但后面的'title'中却正确显示。
标签: c++ windows visual-c++ c++11 localization