大家好!我是黑臂麒麟(起名原因:一个出生右臂自带纹身的高质量程序员😏),也是一位6+(约2个半坤年)的前端;
学习如像练武一样,理论和实践要相结合;
如需深究可前往高级ArkTS系列课程;
望对学习鸿蒙小伙伴有所帮助;

问题

在使用getRawFileContent方法。它有两个参数分别是文件名、获取后的回调。回调它有两个参数,分别是错误码、返回获取的rawfile文件内容的Uint8Array格式编码。这个时候需要利用@kit.ArkTS的util工具函数的TextDecoder属性用于将字节数组解码为字符串,可以处理多种编码格式,包括utf-8、utf-16le/be、iso-8859和windows-1251等不同的编码格式。需要了解getRawFileContent方法的可以移步《HarmonyOS基础:鸿蒙如何获取到 resources/rawfile下文件内容》,话不多说,我们在代码中学习

TextDecoder

TextDecoder用于将字节数组解码为字符串,可以处理多种编码格式,包括utf-8、utf-16le/be、iso-8859和windows-1251等不同的编码格式。

属性

元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统能力: 以下各项对应的系统能力均为SystemCapability.Utils.Lang。

名称 类型 可读 可写 说明
encoding string 编码格式。支持格式:utf-8、ibm866、iso-8859-2、iso-8859-3、iso-8859-4、iso-8859-5、iso-8859-6、iso-8859-7、iso-8859-8、iso-8859-8-i、iso-8859-10、iso-8859-13、iso-8859-14、iso-8859-15、koi8-r、koi8-u、macintosh、windows-874、windows-1250、windows-1251、windows-1252、windows-1253、windows-1254、windows-1255、windows-1256、windows-1257、windows-1258、x-mac-cyrillic、gbk、gb18030、big5、euc-jp、iso-2022-jp、shift_jis、euc-kr、utf-16be、utf-16le、UTF-8、GBK、GB2312、gb2312、GB18030、iso-8859-1。
fatal boolean 是否显示致命错误。
ignoreBOM boolean 是否忽略BOM(byte order marker)标记,默认值为false ,表示解码结果包含BOM标记。

案例1: 从后台获取的文件数据后转化为字符串格式

import { util } from '@kit.ArkTS'; 
import axios, { AxiosResponse } from '@ohos/axios'; 
 
const URL: string = 'xxx'; 
 
@Entry 
@Component 
struct FriendsBook { 
 
  build() { 
  } 
 
  aboutToAppear() { 
    axios<string, AxiosResponse<string>, null>({ 
      method: 'get', 
      url: URL, 
      // 在使用util.TextDecoder方法时,编码和解码格式要一致,所以在获取时需将数据类型设置为ARRAY_BUFFER,否则会出现乱码。 
      responseType: 'ARRAY_BUFFER' 
    }) 
      .then((res: AxiosResponse) => { 
        // 首先使用create构造TextDecoder实例,将编码格式设置为gbk。 
        const textDecoder = util.TextDecoder.create('gbk', { ignoreBOM: true }); 
        // 其次使用decodeWithStream方法通过解码输入的参数,输出对应UTF-8格式的文本字符串。其中传入的参数必须为Uint8Array格式,因此需将获取的数据使用Uint8Array方法转换数组类型。 
        const result = new Uint8Array(res.data); 
        const resultString = textDecoder.decodeToString(result, { stream: false }); 
        // 解析json字符串。 
        const jsonResult = JSON.parse(resultString) as string; 
      }) 
  } 
}

案例二:获取本地resource/rawfile文件夹json文件内容

getContext(this).resourceManager.getRawFileContent('MapData.json', (error: BusinessError, value: Uint8Array) => {
   // 首先使用create构造TextDecoder实例,将编码格式设置utf-8
   const textDecoder = util.TextDecoder.create("utf-8")
   // 将Uint8Array内容转为字符串
   const res = textDecoder.decodeToString(value, { stream: false })
   // 格式化数据
   this.section = JSON.parse(res)
 })

总结:

利用TextDecoder属性把文件内容或者从后端文件数据转为各种格式的字符串格式。

结语

本篇文章的内容结束了。文章错误/不完整的地方,望多指点;
望更多小伙伴们加入harmonyOS开发大家庭,壮大生态圈,让鸿蒙更好,让国产手机应用(物联网)系统更强大。
鸿蒙5.0已经在公测了。和小伙伴一起加油,鸿蒙不仅仅应用开发系统。也会在物联网等领域大展拳脚。鸿蒙之父说:“手机端只是鸿蒙的5%的潜能。应用开发只是第一步,还有更多潜能供我们发觉开发"。
如对你学习有所帮助,希望可爱你动动小手,关注、点赞、收藏;

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐