HarmonyOS基础:使用util.TextDecoder实现字符串编解码
使用util.TextDecoder实现字符串编码
大家好!我是黑臂麒麟(起名原因:一个出生右臂自带纹身的高质量程序员😏),也是一位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%的潜能。应用开发只是第一步,还有更多潜能供我们发觉开发"。
如对你学习有所帮助,希望可爱你动动小手,关注、点赞、收藏;
更多推荐

所有评论(0)