带有重音符号的西班牙语字母[í]显示为奇怪的符号

时间:2014-09-20 12:34:52

标签: c++ windows visual-c++ c++11 localization

我写了一个显示提醒的程序,其中一些是西班牙文,一些是英文。英语显示没有任何问题,但在西班牙语中,带有重音符号[íé]的字母显示为奇怪的符号。这是否意味着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( );
}

1 个答案:

答案 0 :(得分:1)

  

字母í在MessageBoxW

的文本区域中显示为Ã

当您要求MessageBoxW显示utf-8编码文本时,会出现该字母。问题出在您的源代码文件中。它以utf-8编码保存,但编译器不知道这一点。它假定您使用机器的默认代码页保存它。当你讲西班牙语时通常是1252。

再次打开文件,进行任意更改,然后单击文件+另存为。单击“保存”按钮上的箭头,然后选择“使用编码保存”。选择“Unicode(带签名的UTF8) - 代码页65001”。该文件现在将具有BOM,因此编译器 知道它包含utf-8编码文本。

这是默认设置,如果没有BOM,此文件最终会如何结束。注意你是否使用其他文本编辑器,你需要重新配置或退出它。