HarmonyOS 鸿蒙Next:string从ts层传到c层后特殊字符处理问题,如会自动带上导致字符串长度错误,最终字符串被截断

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

HarmonyOS 鸿蒙Next:string从ts层传到c层后特殊字符处理问题,如会自动带上导致字符串长度错误,最终字符串被截断

string从ts层传到c层后针对特殊字符比如 会自动带上导致字符串长度错了最终拿到的字符串是截断的

2 回复

使用如下方式是否可以:

static napi_value Add(napi_env env, napi_callback_info info) {
  size_t requireArgc = 1;
  size_t argc = 1;
  napi_value args[1] = {nullptr};
  size_t size;
  //char str[100];
  napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
  napi_get_value_string_utf8(env, args[0], nullptr, 0, &size);
  size_t str_size = size+1;
  char *buf = new char [str_size];
  memset(buf, 0, str_size);
  napi_get_value_string_utf8(env, args[0], buf, str_size, nullptr);
  OH_LOG_INFO(LOG_APP, '%{public}s', buf);
  // 格式化代码
}

新的str_size永远比size大1,所以不会出现长度不够的情况

更多关于HarmonyOS 鸿蒙Next:string从ts层传到c层后特殊字符处理问题,如会自动带上导致字符串长度错误,最终字符串被截断的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,当string从TypeScript(ts)层传递到C层时,若遇到特殊字符处理问题,特别是字符被自动带上额外信息导致字符串长度错误,最终字符串被截断的情况,这通常与字符编码和传输协议的处理有关。

可能的原因包括:

  1. 字符编码不一致:ts层和C层在处理字符串时使用的编码方式不同,导致特殊字符在传递过程中被错误解析或转换。

  2. 传输协议问题:字符串在通过网络或进程间通信传递时,传输协议可能未正确处理特殊字符,导致数据丢失或格式错误。

  3. 内存管理问题:C层在接收字符串时,内存分配可能不足以容纳完整字符串,特别是当特殊字符被错误解析为多个字节时。

解决方法通常涉及:

  • 确保ts层和C层使用相同的字符编码。
  • 检查并调整传输协议,确保特殊字符被正确处理和传输。
  • 在C层接收字符串前,预分配足够的内存空间,并正确解析字符串长度。

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

回到顶部