Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何处理C++;_C++_Visual C++_Unicode_Ascii_Widestring - Fatal编程技术网

C++ 如何处理C++;

C++ 如何处理C++;,c++,visual-c++,unicode,ascii,widestring,C++,Visual C++,Unicode,Ascii,Widestring,我们在引擎中内置了一个注释系统,允许程序员对各种公开的变量/对象进行注释,然后GUI前端将这些变量/对象用于工具提示和帮助 最近,某些工具提示开始崩溃,在浪费了很多时间之后,我找到了字符:“,除非我弄错了,它是unicode字符,在ASCII中不可用 考虑到这一点,我认为wstring可以解决这个问题。在对更大的项目进行更改之前,我创建了一个测试项目,看看wstring是否能解决这个问题。虽然项目没有崩溃,但行为与wstring的预期不同 #include <iostream> #i

我们在引擎中内置了一个注释系统,允许程序员对各种公开的变量/对象进行注释,然后GUI前端将这些变量/对象用于工具提示和帮助

最近,某些工具提示开始崩溃,在浪费了很多时间之后,我找到了字符:
,除非我弄错了,它是unicode字符,在ASCII中不可用

考虑到这一点,我认为
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 . . .
#包括
#包括
使用名称空间std;
int main()
{
string someString=“没有结果的连续攻击”;
wstring someWString=L“没有结果的连续攻击”;

cout因为您使用的是Visual Studio,所以我假设您使用的是Windows。Windows控制台不支持unicode。它使用OEM字符集。您可以使用CharToOemW/OemToCharW在两者之间进行转换。显然,它无法表示所有unicode字符


Windows使用UTF16作为其系统API。如果工具提示使用Windows API,则可能是您想要使用的wstring。但是,您可以使用UTF8,并在调用Windows API之前将其转换为UTF16。此转换可以使用MultiByteToWideChart/WideCharToMultiByte执行。

因为您使用的是Visual Studio,我假设您是这样的正在使用Windows。Windows控制台不支持unicode。它使用OEM字符集。您可以使用CharToOemW/OemToCharW在两者之间进行转换。显然,它无法表示所有unicode字符


Windows使用UTF16作为其系统API。如果工具提示使用Windows API,则可能是您想要使用的wstring。但是,您可以使用UTF8,并在调用Windows API之前将其转换为UTF16。此转换可以使用MultiByteToWideChart/WideCharToMultiByte执行。

因为您处理的是Unicode字符,如果在项目属性中将字符集设置为使用Unicode字符集,这将是合适的


另一个可能的问题可能是源文件的编码。使用Unicode字符时的最佳做法是将源文件编码为UTF-8,尤其是定义类似于此的字符串文字的文件。请注意,没有BOM的UTF-8可能会很麻烦,因为Studio需要这个BOM,这样它才能正确地解释文件内容。转换文件(我使用记事本+)并将其转换为UTF-8编码,因为您处理的是Unicode字符,所以在项目属性中将字符集设置为使用Unicode字符集将是合适的


另一个可能的问题可能是源文件的编码。使用Unicode字符时的最佳做法是将源文件编码为UTF-8,尤其是定义类似于此的字符串文字的文件。请注意,没有BOM的UTF-8可能会很麻烦,因为Studio需要这个BOM,这样它才能正确地解释文件内容。转换文件(我使用记事本+)并将其转换为UTF-8编码。可能源文件本身编码不正确。其编码是什么?IIRC控制台不支持非代码页字符。您的工具提示有效吗?@NiklasB.:我不确定如何检查?我正在使用Visual Studio 2008创建一个新项目和源代码文件。我不确定如何检查源文件本身的编码…?在项目属性中,我尝试了
使用多字节字符集
使用Unicode字符集
,但输出没有差异。@Rup:我必须修改相当多的代码,使其与
wstring
一起工作在进行更改之前,我想我应该尝试一个较小的项目,并发现它们没有解决问题。可能源文件本身编码不正确。它的编码是什么?IIRC控制台不支持非代码页字符。你的工具提示有用吗?@NiklasB.:我不确定如何检查?我正在使用Visual Studio 2008在上面的示例中创建一个新的项目和源文件。我不确定如何检查源文件本身的编码…?在项目属性中,我尝试了
使用多字节字符集
使用Unicode字符集
,输出没有任何差异。@Rup:我必须修改相当多的代码以使让它与
wstring
一起工作,所以我想在进行更改之前,我会尝试一个较小的项目,并发现它们没有解决问题。我在NPP中尝试了相同的方法(保存为UTF-8或UCS-2),但没有任何帮助(尽管我使用了原始
cl
,没有VS)。我认为问题在于控制台不理解输出。我的经验是,如果程序使用Unicode字符集并且不能正确显示字符串文字,很可能是因为源文件的编码错误。是的,我也这么认为(请参阅我的评论),但我刚才试过了,这不是问题所在。我在NPP中也试过同样的方法(保存为UTF-8或UCS-2),但没有任何帮助(尽管我使用了原始
cl
,没有VS)。我认为问题在于控制台不理解输出。我的经验是,如果程序使用Unicode字符集,并且不能正确显示字符串文字,很可能是因为源文件的编码不正确。是的,我也这么认为(见我的评论),但我刚刚尝试过,这不是pr