C ++使用ICU和Nana GUI库 - 字符串转换?

时间:2016-07-12 15:06:45

标签: c++ encoding utf-16 icu nana

我刚用C / C ++中的ICU做了一些成功的测试。我需要解析不同编码的不同CSV文件(可能是UTF-8,UTF-16LE),对数据进行一些修改,最后将所有内容作为UTF-8输出到文件中。这就是为什么我选择ICU的原因。字符集检测通常很有效,字符处理和转换为UTF-8。

现在,我想将使用GUI库,Nana进行CSV加载,操作等的库部件集成。 Nana似乎使用std :: string和std :: wstring。

由于ICU在内部将所有数据存储为UTF-16,因此我在使用ICU时获得了UChars或UnicodeStrings。但是我怎么能和娜娜一起使用它们,它们并没有整合。与ICU?有什么方法可以将UChar数组转换为wstring,或将UnicodeString转换为wstring?

没有在ICU文档中找到任何提示,所以...也许其他人已经在那里工作了?

2 个答案:

答案 0 :(得分:1)

大多数nana函数都希望std::string以UTF-8编码。

您可以使用char *获取或返回std::wstring来转换为UTF-8。

一些nana函数,如ICU functions,有static_cast<wchar_t *>(some_UChar*)的重载,预计会以UTF-16(在windows中)或UTF-32(在Linux中)编码,可用于传递给操作系统可能是具有本机字符类型和编码的字符串。 如果您需要转换,nana提供widget::caption,可以(明确地或隐含地)管理从/到UTF-8 / UTF-16 / UTF-32的一些最常见的转换。

如果您尝试将 $scope.myData = {"PatientSearchResponse": { "pageNumber": 1, "pageSize": 50, "patDataBean": [ { "gender": { "code": "male", "description": "Male", "type": "gender" }, "patDateofBirth": "1997/06/19", "patFirstName": "aman", "patLastName": "elvis", "patSurvivalStat": { "code": "A", "description": "Alive", "type": "patient_status" }, "patientIdentifier": { "OID": "589a9cf6-4513-49e1-bd5c-c7363849ed93", "organizationId": { "PK": 54, "siteName": "CTRP" }, "patientId": "1" } }, { "gender": { "code": "male", "description": "Male", "type": "gender" }, "patDateofBirth": "2001/07/18", "patFirstName": "Elvis", "patLastName": "Harvey", "patSurvivalStat": { "code": "dead", "description": "Dead", "type": "patient_status" }, "patientIdentifier": { "OID": "151d0222-3726-40ee-8f69-0a6800727607", "organizationId": { "OID": "83d09227-9c65-4d7b-94da-baaf5c07b38a", "siteName": "Texas" }, "patientId": "100" } }]}} 传递给娜娜,请告诉我们结果。我无法测试。

关于Unicode处理的nana文档迫切需要更新( mea culpa

答案 1 :(得分:0)

根据ICU文档,UChar数组是一个16位宽字符的数组...这意味着常见实现中的wchar_t数组。这意味着在系统中提供的wchar_t为16位宽,您可以安全地将getTerminatedBuffer()函数的结果转换为const wchar_t *,并将其直接用作C宽字符串,或者将其用于建立一个std::wstring