如何解决HarmonyOS鸿蒙Next中文件的中文乱码问题

如何解决HarmonyOS鸿蒙Next中文件的中文乱码问题

解决措施

读取文件内容的buffer数据后,通过TextDecoder对文件内容进行解码。

import { util } from "@kit.ArkTS"

import { fileIo } from '@kit.CoreFileKit';

let filePath = getContext(this).filesDir + "/test0.txt";

let stream = fileIo.createStreamSync(filePath, "r+");

let buffer = new ArrayBuffer(4096);

let readOut = stream.readSync(buffer);

let textDecoder = util.TextDecoder.create('utf-8', { ignoreBOM: true });

let readString = textDecoder.decodeWithStream(new Uint8Array(buffer), { stream: false });

console.log("读取的文件内容:" + readString);

参考链接

TextDecoder


更多关于如何解决HarmonyOS鸿蒙Next中文件的中文乱码问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

链接打不开,说要授权,这妥妥的歧视呀。。。

另,解决中文解码问题也可用以下方法处理buffer:

let num = stream.readSync(buffer);
this.content = decode(new Uint8Array(buffer));

其中 decode() 方法如下:

export function decode(buffer: Uint8Array): string {
  let str: string = '';
  for (let i = 0; i < buffer.length; i++) {
    switch (buffer[i] >> 4) {
      case 0:
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
        str += String.fromCodePoint(buffer[i] & 0x7f);
        break;
      case 12:
      case 13:
        str += String.fromCodePoint(((buffer[i] & 0x1f) << 6) + (buffer[i + 1] & 0x3f));
        i++;
        break;
      case 14:
        str += String.fromCodePoint(((buffer[i] & 0xf) << 12) + ((buffer[i + 1] & 0x3f) << 6) + (buffer[i + 2] & 0x3f));
        i += 2;
        break
      case 15:
        str += String.fromCodePoint(((buffer[i] & 0x7) << 18) + ((buffer[i + 1] & 0x3f) << 12) + ((buffer[i + 2] & 0x3f) << 6) + (buffer[i + 3] & 0x3f));
        i += 3;
        break;
    }
  }
  return str;
}

更多关于如何解决HarmonyOS鸿蒙Next中文件的中文乱码问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中解决中文乱码问题,可以尝试以下步骤:

  1. 检查文件编码:确保文件保存时使用UTF-8编码,这是支持中文的通用编码格式。

  2. 设置系统语言:在系统设置中将语言设置为中文(简体或繁体),以确保系统正确识别和显示中文字符。

  3. 更新应用:确保使用的应用程序是最新版本,开发者可能已修复了与中文显示相关的问题。

  4. 字体支持:确认系统安装了支持中文的字体,如“思源黑体”或“微软雅黑”。

  5. 重启设备:有时简单的重启可以解决临时的显示问题。

如果问题依旧存在,建议联系应用开发者或华为技术支持获取进一步帮助。

回到顶部