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

Spanish letters with accents [í é] appear as strange symbols

本文关键字:符号 西班牙语 显示 音符      更新时间:2023-10-16

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

字母í在MessageBoxW 的文本区域中显示为É

当您要求MessageBoxW显示utf-8编码文本时,会出现该字母。问题出在源代码文件上。它被保存在utf-8编码中,但编译器对此一无所知。它假设您使用机器的默认代码页保存了它。当你说西班牙语时,通常是1252。

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

这是默认值,不清楚该文件是如何在没有BOM表的情况下结束的。注意,如果您使用另一个文本编辑器,您将需要重新配置或停用它。