【发布时间】:2012-03-03 02:23:21
【问题描述】:
我们的引擎中内置了一个评论系统,允许程序员为各种公开的变量/对象放置 cmets,然后 GUI 前端使用这些变量/对象提供工具提示和帮助。
最近,某些工具提示开始崩溃,在浪费了很多时间后,我将其追踪到字符:’,除非我弄错了,否则它是一个 unicode 字符,在 ASCII 中不可用。
考虑到this answer,我认为wstring 可以解决问题。在对更大的项目进行更改之前,我创建了一个测试项目以查看 wstring 是否可以解决问题。尽管项目没有崩溃,但行为与 wstring 的预期不同。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string someString = "successive attack that DOESN’T result";
wstring someWString = L"successive attack that DOESN’T result";
cout << someString << endl;
wcout << someWString << endl;
return 0;
}
//Console Output//
successive attack that DOESNÆT result
successive attack that DOESNPress any key to continue . . .
我很久以前读过this article,并认为我理解与字符集相关的问题,但显然不是这样。我将不胜感激这个问题的解决方案以及对正在发生的事情以及如何避免将来出现类似问题的良好解释。
【问题讨论】:
-
可能源文件本身没有正确编码。它的编码是什么?
-
IIRC 控制台不能很好地支持非代码页字符。你的工具提示有用吗?
-
@NiklasB.:我不确定如何检查?我正在使用 Visual Studio 2008 创建一个新项目和上例中的源文件。我不确定如何检查源文件本身的编码...?在项目属性中,我尝试了
Use Multi-byte Character Set和Use Unicode Character Set,输出没有区别。 -
@Rup:我必须修改很多代码才能使其与
wstring一起使用,所以我想在进行更改之前尝试一个较小的项目并发现它们没有修复问题。
标签: c++ visual-c++ unicode ascii widestring