【发布时间】:2012-03-02 20:06:40
【问题描述】:
我正在尝试使用 ICU 库来测试字符串是否包含无效的 UTF-8 字符。我创建了一个 UTF-8 转换器,但没有无效数据给我一个转换错误。感谢您的帮助。
谢谢, 普拉桑特
int main()
{
string str ("AP1120 CorNet-IP v5.0 v5.0.1.22 òÀ MIB 1.5.3.50 Profile EN-C5000");
// string str ("example string here");
// string str (" ����������" );
UErrorCode status = U_ZERO_ERROR;
UConverter *cnv;
const char *sourceLimit;
const char * source = str.c_str();
cnv = ucnv_open("utf-8", &status);
assert(U_SUCCESS(status));
UChar *target;
int sourceLength = str.length();
int targetLimit = 2 * sourceLength;
target = new UChar[targetLimit];
ucnv_toUChars(cnv, target, targetLimit, source, sourceLength, &status);
cout << u_errorName(status) << endl;
assert(U_SUCCESS(status));
}
【问题讨论】:
-
不熟悉这个库,但在我看来,如果你用
"utf-8"打开你的转换器,然后调用ucnv_toUChars进行转换,你是不是或多或少地告诉它从Unicode 转换为Unicode?在这种情况下,它可能会成功短路。我会尝试使用 iso 编码或其他方式打开它。