gpt4 book ai didi

c++ - 如何在源文件中嵌入 unicode 字符串常量?

转载 作者:可可西里 更新时间:2023-11-01 15:37:00 27 4
gpt4 key购买 nike

我正在编写一些单元测试,这些测试将验证我们对使用除正常拉丁字母之外的其他字符集的各种资源的处理:西里尔字母、希伯来字母等。

我遇到的问题是我找不到将期望值嵌入测试源文件的方法:这是我正在尝试做的事情的示例...

///
/// Protected: TestGetHebrewConfigString
///
void CPrIniFileReaderTest::TestGetHebrewConfigString()
{
prwstring strHebrewTestFilePath = GetTestFilePath( strHebrewTestFileName );
CPrIniFileReader prIniListReader( strHebrewTestFilePath.c_str() );
prIniListReader.SetCurrentSection( strHebrewSubSection );

CPPUNIT_ASSERT( prIniListReader.GetConfigString( L"דונדארןמע" ) == L"דונהשךוק") );
}

这根本行不通。以前我使用一个宏来解决这个问题,该宏调用一个例程将一个窄字符串转换为一个宽字符串(我们在我们的应用程序中到处使用 towstring,所以它是现有代码)

#define UNICODE_CONSTANT( CONSTANT ) towstring( CONSTANT )

wstring towstring( LPCSTR lpszValue )
{
wostringstream os;
os << lpszValue;
return os.str();
}

上面测试中的断言变成了:

CPPUNIT_ASSERT( prIniListReader.GetConfigString( UNICODE_CONSTANT( "דונדארןמע" ) ) == UNICODE_CONSTANT( "דונהשךוק" ) );

这在 OS X 上运行良好,但现在我正在移植到 Linux 上,我发现测试都失败了:它也感觉很糟糕。谁能告诉我他们是否有更好的解决方案来解决这个问题?

最佳答案

一种繁琐但可移植的方法是使用数字转义码构建字符串。例如:

wchar_t *string = L"דונדארןמע";

变成:

wchar_t *string = "\x05d3\x05d5\x05e0\x05d3\x05d0\x05e8\x05df\x05de\x05e2";

您必须将所有 Unicode 字符转换为数字转义符。这样您的源代码就变得与编码无关。

可以使用在线工具进行转换,例如this one .它输出 JavaScript 转义格式 \uXXXX,因此只需搜索并将 \u 替换为 \x 即可获得 C 格式。

关于c++ - 如何在源文件中嵌入 unicode 字符串常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com