我刚用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文档中找到任何提示,所以...也许其他人已经在那里工作了?
答案 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
。