带有重音符号 [í é] 的西班牙语字母显示为奇怪的符号
Spanish letters with accents [í é] appear as strange symbols
我写了一个显示提醒的程序,其中一些是西班牙语,一些是英语。英语字母的显示没有任何问题,但在西班牙语字母中,带有口音的字母看起来像是奇怪的符号。这是否意味着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表的情况下结束的。注意,如果您使用另一个文本编辑器,您将需要重新配置或停用它。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 使用gcc从静态链接的文件中查找可选符号
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- VC++本机单元测试,找不到调试符号
- C++西班牙语问号
- 带有重音符号 [í é] 的西班牙语字母显示为奇怪的符号
- c++ Windows/Mac/iOS中的西班牙语字符
- 在C/ c++或任何其他类似语言中,对变量或数据类型应用&符号时返回的地址类型
- 在Rcpp中用(西班牙语)重音单词排序映射
- 将字符与西班牙语字符进行比较
- 如何读取西班牙语编码的文件并逐个字符存储