HarmonyOS 鸿蒙Next TXT文件读写 中文乱码

HarmonyOS 鸿蒙Next TXT文件读写 中文乱码

额外配置

C:\Users\XXX\AppData\Roaming\Huawei\DevEcoStudio3.1\devecostudio64.exe.vmoptions

追加

-Dfile.encoding=utf-8

测试用例

  onBnPressed(): void {
    this.testFileIO();
  }

  async testFileIO() {
    hilog.info(0x0001, "mylog", "[testFileIO] start");

    let io = new FileIoTxt();
    let root = await io.getExternalCacheDir();
    hilog.info(0x0001, "mylog", "[testFileIO] root = " + root);
    /**
     * root = /storage/emulated/0/Android/data/com.xxxx.unittest_harmony_os_arkts/cache
     */

    let dstFpne = root + "/" + "temp.txt";
    let message = "哈哈\n";
    message = message + "哈哈2\n";
    await io.writeTxt(dstFpne, message);

    let context = await io.readTxt(dstFpne);
    hilog.info(0x0001, "mylog", "[testFileIO] txt = " + context);

    hilog.info(0x0001, "mylog", "[testFileIO] finished");
  }

TXT文件读写类封装

file_io_txt.ets

import util from '@ohos.util';
import fileio from '@ohos.fileio';
import hilog from '@ohos.hilog';
import featureAbility from '@ohos.ability.featureAbility';

export class FileIoTxt {
  constructor() {
  }

  public async getExternalCacheDir(): Promise<string> {
    let context = featureAbility.getContext();
    let root = await context.getExternalCacheDir();
    return root;
  }

  public async writeTxt(fpne: string, msg: string) {
    hilog.info(0x0001, "mylog", "[writeTxt] start");
    let fd = await fileio.open(fpne, 0o100 | 0o2, 0o666);
    try {
      let number = await fileio.write(fd, msg);
      hilog.info(0x0001, "mylog", "[writeTxt] write size = " + number);
    } catch (error) {
      hilog.info(0x0001, "mylog", "[writeTxt] error = " + error);
    }
    hilog.info(0x0001, "mylog", "[writeTxt] finished to " + fpne);
  }

  public async readTxt(fpne: string): Promise<string> {
    hilog.info(0x0001, "mylog", "[readTxt] start");
    let fd = await fileio.open(fpne, 0o2);
    let buf = new ArrayBuffer(4096);
    let ret: string;
    try {
      let readOut = await fileio.read(fd, buf);
      let decoder = new util.TextDecoder("utf-8", { ignoreBOM: true });
      ret = decoder.decode(new Uint8Array(readOut.buffer), { stream: false });
    } catch (err) {
      hilog.info(0x0001, "mylog", "[readTxt] err: " + err);
    }
    hilog.info(0x0001, "mylog", "[readTxt] finished = " + ret);
    return ret;
  }
}

LOG输出

: [testFileIO] start
: [testFileIO] root = /storage/emulated/0/Android/data/com.xxxx.unittest_harmony_os_arkts/cache
: [writeTxt] start
: [writeTxt] write size = 15
: [writeTxt] finished to /storage/emulated/0/Android/data/com.xxxx.unittest_harmony_os_arkts/cache/temp.txt
: [readTxt] start
: [readTxt] finished = 哈哈
: 哈哈2
: [testFileIO] txt = 哈哈
: 哈哈2
: [testFileIO] finished

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

1 回复

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


针对HarmonyOS(鸿蒙)系统中TXT文件读写出现中文乱码的问题,可能的原因及解决方法如下:

在鸿蒙系统中进行TXT文件读写操作时,如果遇到中文乱码,这通常是由于字符编码不一致导致的。TXT文件可能采用了UTF-8、GBK、GB2312等多种编码格式,而读写代码如果没有正确指定编码,就可能造成乱码。

解决方法:

  1. 明确文件编码:首先确认TXT文件的实际编码格式。这可以通过文本编辑器查看或修改文件编码来得知。

  2. 统一编码读写:在鸿蒙系统的代码中,使用与文件编码一致的编码格式进行读写操作。例如,如果文件是UTF-8编码,那么在读取和写入时都应指定为UTF-8。

  3. 使用合适的API:鸿蒙系统提供了丰富的文件操作API,确保使用支持指定编码的API进行文件读写。这通常涉及到设置正确的字符编码参数。

  4. 测试与验证:在修改代码后,进行充分的测试以验证中文乱码问题是否得到解决。

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

回到顶部