我写了一个显示提醒的程序,其中一些是西班牙文,一些是英文。英语显示没有任何问题,但在西班牙语中,带有重音符号[íé]的字母显示为奇怪的符号。这是否意味着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( );
}
答案 0 :(得分:1)
字母í在MessageBoxW
的文本区域中显示为Ã
当您要求MessageBoxW显示utf-8编码文本时,会出现该字母。问题出在您的源代码文件中。它以utf-8编码保存,但编译器不知道这一点。它假定您使用机器的默认代码页保存它。当你讲西班牙语时通常是1252。
再次打开文件,进行任意更改,然后单击文件+另存为。单击“保存”按钮上的箭头,然后选择“使用编码保存”。选择“Unicode(带签名的UTF8) - 代码页65001”。该文件现在将具有BOM,因此编译器 知道它包含utf-8编码文本。
这是默认设置,如果没有BOM,此文件最终会如何结束。注意你是否使用其他文本编辑器,你需要重新配置或退出它。