2017-02-14 68 views
0

文件包含非拉丁文内容并以UTF8编码。 目前现有的代码使用“fopen”来打开文件,解析它并用non-latin内容调用我的validate函数,并将数据作为char*传递。处理utf8编码的char *数组

void validate(const char* str) 
{ 
    .... 
} 

我必须对通过的char数组做一些验证。

应用程序使用Sun C++ 5.11,我认为它不支持unicode。 (我在Sun C++ 5.11上搜索unicode支持,但没有得到任何关于unicode支持的指示,所以我编写了一个简单的程序来检查Sun C++是否支持unicode,并且程序没有编译)。

如何对输入char*进行验证?是否有可能使用wchar_t

+0

这一切都取决于你的意思是“验证”......你应该如何“验证”文本?你有什么要求来建立你的功能? –

+0

我必须验证是否存在特殊字符(要求有一些非拉丁字符与'Æ','Ð'进行比较),连续的空格。 – NJMR

+0

也许[这个老问题](http://stackoverflow.com/questions/313555/light-c-unicode-library)可以帮助你吗? –

回答

1

应用程序使用<compiler>和我认为不支持Unicode

这是没有问题的。您只需要unicode的编译器支持以将unicode字符串文字嵌入到代码中,或者使用固定宽度字符类型来表示UTF-16或UTF-32。你的unicode是UTF-8,来自用户输入,所以不需要unicode编译器支持。

如何对输入char*进行验证?

C++标准库有非常少的工具来处理unicode。提供的工具主要由不同的unicode格式之间的转换组成,甚至这些工具在C++ 11之前不可用。

输入和输出大多只是复制字节,所以不需要进行重要的处理。对于其他处理(您大概需要“验证”),您需要自己实施这些工具,或者使用第三方工具。您将需要参考〜1000页的Unicode标准的,如果你选择实现自己:http://www.unicode.org/versions/Unicode9.0.0/UnicodeStandard-9.0.pdf

使用wchar_t这可能吗?

wchar_t是本地宽字符类型,用于系统的本地宽字符编码。 UTF-8不使用宽码单元。

+0

我打算将无效字符的列表存储在文本文件中,编码将为utf8。然后将内容读取到char数组,然后对该数组进行验证。 – NJMR