c++ - 带有重音符号 [í é] 的西类牙字母显示为奇怪的符号

标签 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( );
}

最佳答案

The letter í is displayed as à in the text area of the MessageBoxW

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

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

这是默认设置,不清楚这个文件是如何在没有 BOM 的情况下结束的。如果您使用其他文本编辑器,请当心,您将需要重新配置或停用它。

关于c++ - 带有重音符号 [í é] 的西类牙字母显示为奇怪的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25948809/

相关文章:

windows - 在 powershell 中检查时区的语言独立方式?

java - jmap -histo 与 Windows 上的特定对象

windows - 使用 Ghostscript 批量打印 PDF 时弹出窗口

c++ - 将我的 MMX Intrinsics 转换为 x64 (SSE) 我做错了什么?

c++ - 什么时候 abort() 优于 exit()?

c++ - 通用包装器 C++

c++ - 将函数放入模板

c++ - C 语言还在游戏引擎中被广泛使用吗?

c++ - 与 MingW 相比,Visual C++ 中的不同行为

c++ - 简单的 std::sort 不工作