HarmonyOS 鸿蒙Next iconv库字符串编码转换失败

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next iconv库字符串编码转换失败

std::string UTF8ToGBK(LPCSTR utf8_str) { #ifdef _WIN32 // Windows 版本 int len = MultiByteToWideChar(CP_UTF8, 0, utf8_str, -1, NULL, 0); wchar_t* wstr = new wchar_t[len]; if(wstr == NULL)return “”; MultiByteToWideChar(CP_UTF8, 0, utf8_str, -1, wstr, len);

len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL); char* str = new char[len]; if (str == NULL) return “”; WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);

std::string result(str); delete[] wstr; delete[] str; return result; #else // Linux 版本 iconv_t cd = iconv_open(“gb2312”, “utf-8”); if (cd == (iconv_t)-1) return “”;

size_t in_len = strlen(utf8_str); size_t out_len = in_len * 2; // 估计输出缓冲区大小 char* in_buf = const_cast<char*>(utf8_str); char* out_buf = new char[out_len]; char* out_ptr = out_buf;

if (iconv(cd, &in_buf, &in_len, &out_ptr, &out_len) == (size_t)-1) { iconv_close(cd); delete[] out_buf; return “”; }

std::string result(out_buf, out_ptr - out_buf); iconv_close(cd); delete[] out_buf; return result; #endif }

此函数 iconv_t cd = iconv_open(“gb2312”, “utf-8”); 返回-1, 请问是系统不支持么?


更多关于HarmonyOS 鸿蒙Next iconv库字符串编码转换失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

HarmonyOS采用musl作为C标准库,在musl里不支持将源字符集编码格式转换成这五种目标字符集编码格式:gb18030,gbk,gb2312,big5和euckr。

参考文档:链接

这边建议您使用ICU库。

文档说明:链接

链接

更多关于HarmonyOS 鸿蒙Next iconv库字符串编码转换失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS(鸿蒙)Next系统中iconv库字符串编码转换失败的问题,可能的原因及解决方案如下:

  1. 字符集支持问题:确保iconv库支持源编码和目标编码。鸿蒙系统可能默认不包含某些特定字符集的支持,需要确认字符集是否在库的支持范围内。

  2. 输入数据问题:检查输入字符串是否有效,以及是否包含无法转换的字符。无效的输入数据可能导致转换失败。

  3. 库版本问题:确认使用的iconv库版本是否与鸿蒙系统兼容。有时,库的新版本可能引入不兼容的更改或修复了旧版本中的错误。

  4. 内存问题:转换过程中可能因内存不足而导致失败。确保系统有足够的内存来执行转换操作。

  5. API使用错误:检查iconv函数的调用参数是否正确,包括输入指针、输出指针、输入字节数、输出字节数以及转换描述符。

  6. 系统环境:确认鸿蒙系统的区域设置和语言环境是否影响iconv库的行为。

如果上述检查均未能解决问题,可能是由于更深层次的系统或库的问题。此时,建议联系鸿蒙系统的官方技术支持或访问官方论坛寻求帮助。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部