用于单元测试的Unicode测试字符串

时间:2011-05-26 10:01:40

标签: c++ unit-testing unicode

我需要一些Utf32测试字符串来练习一些跨平台的字符串操作代码。我想要一套测试字符串来运行utf32< - > utf16< - > utf8编码验证BMP之外的字符可以从utf32转换为utf16代理,通过utf8,然后返回。正常。

如果所讨论的字符串不只是由随机字节组成,而且在它们编码的(各种)语言中实际上有意义,我总会觉得它更优雅。

6 个答案:

答案 0 :(得分:13)

虽然这不是你要求的,但我总是觉得这个测试文档很有用。

http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt

同一网站提供此

http://www.cl.cam.ac.uk/~mgk25/ucs/examples/quickbrown.txt

...这是英语的“Quick brown fox”文本的等价物,它使用各种语言来练习所有使用的字符。这个页面指的是更大的“pangrams”列表,它曾经在维基百科上,但显然在那里删除了。它仍然可以在这里找到:

http://clagnut.com/blog/2380/

答案 1 :(得分:0)

https://github.com/noct/cutf/tree/master/bin

包括以下文件:

UTF-8-demo.txt
big.txt
quickbrown.txt
utf8_invalid.txt

答案 2 :(得分:-1)

您可以通过Google搜索找到大量附带数据(并在SO上查看右栏中的类似问题......)

但是,我建议您将测试字符串构建为字节数组。它并不是真正的“什么数据”,只是正确处理了unicode。

E.g。你需要确保不同规范化形式的相同字符串(即使不是规范形式)仍然比较相等。

您需要检查字符串长度检测是否健壮(并识别单字节,双字节,三字节和四字节字符)。您将需要检查从头到尾遍历字符串是否符合相同的逻辑。针对unicode字符随机访问的更有针对性的测试。

这些都是你所知道的,我敢肯定。我只是拼写它们以提醒您需要测试数据,以满足边缘情况,即Unicode固有的逻辑属性。

只有这样你才能获得适当的测试数据。


超出此范围(技术正确的Unicode处理)是实际本地化(整理,字符集转换等)。我参考土耳其测试

以下是有用的链接:

答案 3 :(得分:-1)

如果您不需要像http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt测试用例那样广泛的内容,以下工具可用于创建一些感兴趣的测试用例:

http://rishida.net/tools/conversion/

例如:

// point    UTF-16      UTF-8
// U+007A   007A        7A
// U+6C34   6C34        E6 B0 B4
// U+10000  D800 DC00   F0 90 80 80
// U+1D11E  D834 DD1E   F0 9D 84 9E
// U+10FFFD DBFF DFFD   F4 8F BF BD

答案 4 :(得分:-1)

你可以尝试这个(有一些俄语,希腊语,中文等句子来测试Unicode):

http://www.madore.org/~david/misc/unitest/

答案 5 :(得分:-1)

要真正测试格式之间所有可能的转换,而不是字符转换(即towupper(),towlower()),您应该测试所有字符。以下循环为您提供了所有这些:

for(wint_t c(0); c < 0x110000; ++c)
{
    if(c >= 0xD800 && c <= 0xDFFF)
    {
        continue;
    }
    // here 'c' is any one Unicode character in UTF-32
    ...
}

这样你可以确保你不会错过任何东西(即100%完成测试。)这只有1,112,065个字符,因此现代计算机速度非常快。