2011-05-26 91 views
11

我需要一些Utf32测试字符串来锻炼一些跨平台字符串操作代码。我想要一套测试字符串,它们可以执行utf32 < - > utf16 < - > utf8编码,以验证BMP之外的字符可以从utf32,utf16替代品,通过utf8转换回来。正常。单元测试的Unicode测试字符串

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

回答

12

虽然这是不太你问什么,我总是发现这个测试文件有用。

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

该站点上提供此

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

......这是英国的“快速的棕色狐狸”文本的等价物,其练习中使用的所有字符,各种语言。此页面指的是以前在维基百科上的“pangrams”的更大列表,但显然在那里被删除。它仍然可以在这里找到:

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

+1

这就是我正在寻找! – 2011-07-30 05:57:23

+0

quickbrown.txt文档是指Wiki上的更具说明性的列表,但已被删除。不过这是[这里](http://clagnut.com/blog/2380/)。 – TinyRacoon 2016-05-17 15:02:04

-1

您可以通过谷歌搜索发现很多附带的数据(看像这些在做题的右列...)

不过,我建议大家还是建立自己的测试串作为字节数组。这不是真正的'什么数据',只是unicode得到正确处理。

E.g.你会希望确保不同规范化形式的相同字符串(即使不是规范形式)仍然相等。

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

这些都是你知道的事情,我敢肯定。我只是拼出来提醒你,你需要测试数据来满足边缘情况,这是Unicode固有的逻辑属性。

只有这样你才能有正确的测试数据。


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

这里是有用的链接:

-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%完整的测试)。这是唯一的1112065个字符,所以这将是非常快了现代计算机。