HarmonyOS鸿蒙Next中怎么获取txt文件中文字的编码格式
HarmonyOS鸿蒙Next中怎么获取txt文件中文字的编码格式 用arkts,我想获取本地的txt文件,在保存到自己软件的目录下,打开这个txt文件然后自动解码显示。
目前有几个问题
- 获取到本地的txt的uri:datashare:///media/file/2118 这种,然后用mediaLibrary获取到了文件名。
然后想用@ohos.file.fs中的fs.copyFile函数把这个文件复制到自己软件中的一个文件夹内,现在用这个函数报错13900002没有这个文件或目录。
- 读取文件的函数返回的是ArrayBuffer的类型,目前我用txt文件的小说试了一下发现全是乱码,有什么办法可以识别出txt文件的编码格式吗
更多关于HarmonyOS鸿蒙Next中怎么获取txt文件中文字的编码格式的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我也写过一个小说app,因为网上下载的编码未知。
我是通过读取文件前200个字符,然后用不同的编码解码,再用正则匹配一下汉字个数,不是乱码当然能匹配很多汉字和英文了,可以做到简单的判断编码。
let reg = /[\u4E00-\u9FA5]/g // 汉字正则表达式
if (reg.test(bookMsg)){ // 测试匹配到汉字
let num = bookMsg.match(reg);
if (num.length > 100){ // 检测到汉字大于一定阈值,认为编码正确
return true
}
}
return false
如果有更好的办法分享下,谢谢
更多关于HarmonyOS鸿蒙Next中怎么获取txt文件中文字的编码格式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我最近找到了一个第三方库,
https://ohpm.openharmony.cn/#/cn/detail/
@ohos%2Fjuniversalchardet
可以识别出字符编码。用了一下发现很好用,
问题1
【1】权限要用READ_ONLY
fs.open(uri, fs.OpenMode.READ_ONLY)
【2】要添加权限WRITE_MEDIA
"name": "ohos.permission.WRITE_MEDIA"
问题2
不知道,是我的话,肯定是交给服务端处理。╮(╯▽╰)╭
谢谢,我等会尝试一下。
在HarmonyOS鸿蒙Next中,获取txt文件的编码格式可以通过以下步骤实现:
- 读取文件内容:使用
File
类读取txt文件的二进制数据。 - 检测编码:使用
CharsetDetector
类(来自icu4j
库)检测文件的编码格式。CharsetDetector
可以分析字节流并推测出最可能的编码。
示例代码:
import com.ibm.icu.text.CharsetDetector;
import ohos.global.resource.RawFileEntry;
import ohos.global.resource.ResourceManager;
public String detectEncoding(ResourceManager resourceManager, String filePath) {
try {
RawFileEntry rawFileEntry = resourceManager.getRawFileEntry(filePath);
byte[] fileData = rawFileEntry.readBytes();
CharsetDetector detector = new CharsetDetector();
detector.setText(fileData);
return detector.detect().getName();
} catch (Exception e) {
e.printStackTrace();
return "Unknown";
}
}
此方法返回检测到的编码格式,如UTF-8
、GBK
等。