HarmonyOS使用file进行写入json数据, 读取后中文乱码. 这种应该如何处理

  • 写入数据
async writeDataAsync(path: string, content: ArrayBuffer | string): Promise<void> { 
  let fd = (await fs.open(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)).fd 
  let stat = await fs.stat(path) 
  await fs.write(fd, content, { offset: stat.size }) 
  await fs.close(fd) 
}
  • 读取数据
readFile(path: string): ArrayBuffer { 
  let fd = fs.openSync(path, fs.OpenMode.READ_WRITE).fd; 
  let length = fs.statSync(path).size 
  let buf = new ArrayBuffer(length); 
  fs.readSync(fd, buf) 
  return buf 
}
  • ArraryBuffer转字符串
export function arrayBufferToString(buffer: ArrayBuffer): string { 
  return String.fromCharCode.apply(null, new Uint8Array(buffer)); 
}

已参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-fs-V5

HarmonyOS
9天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

String.fromCharCode.apply(null, new Uint8Array(buffer)) 方法将Uint8Array转换为字符串时不支持中文,如果有中文建议使用util.TextEncoder相关接口,示例:

export function arrayBufferToString(buffer: ArrayBuffer): string { 
   return textDecode(new Uint8Array(buffer)); 
} 
export function textEncode(message: string): Uint8Array { 
  let textEncoder = new util.TextEncoder("utf-8"); 
  let buffer = new ArrayBuffer(20); 
  let result = new Uint8Array(buffer); 
  result = textEncoder.encodeInto(message); 
  return result; 
}
分享
微博
QQ
微信
回复
9天前
相关问题
HarmonyOS 大整数如何处理
168浏览 • 1回复 待解决
HarmonyOS 中文base64加密解密乱码
161浏览 • 1回复 待解决
如何解决文件的中文乱码问题
2208浏览 • 3回复 待解决
如何JSON数据进行解析优化
483浏览 • 1回复 待解决
如何读取本地JSON文件
1199浏览 • 1回复 待解决
DevEco Studio IDE 代码 中文汉字乱码
12083浏览 • 2回复 待解决
ArkTS如何读取本地json
6500浏览 • 1回复 待解决
应用线程过多时如何处理
1675浏览 • 1回复 待解决