【仓颉三方库】工具类—— chardet4cj

39 篇文章 0 订阅
39 篇文章 0 订阅

chardet4cj

介绍

是一个字符编码高效识别检测库

特性

  • 🚀 支持 ISO-2022-CN 编码格式

  • 🚀 支持 UTF-8 编码格式

  • 💪 支持 UTF-16BE / UTF-16LE 编码格式

架构

源码目录

.
├── doc
├── src
│   ├── charset_prober.cj
│   ├── coding_stateMachine.cj
│   ├── constants.cj
│   ├── encodingDetectorInputStream.cj
│   ├── encodingDetectorOutputStream.cj
│   ├── escCharset_prober.cj
│   ├── hzs_model.cj
│   ├── is02022cn_model.cj
│   ├── mbcsgroup_prober.cj
│   ├── pkgint.cj
│   ├── readerFactory.cj
│   ├── smmodel.cj
│   ├── unicode_bom.cj
│   ├── universalDetector.cj
│   ├── utf8_model.cj
│   └── utf8_prober.cj
├── test
│   ├── DOC
│   ├── FUZZ
│   ├── HLT
│   └── LLT
├── CHANGELOG.md
├── LICENSE.txt
├── module.json
├── README.md
└── README.OpenSource
  • doc 文档目录,用于存API接口文档
  • src 是库源码目录
  • test 存放 DOC 功能示例、FUZZ 测试用例、HLT 测试用例、LLT 自测用例

接口说明

主要类和函数接口说明详见 API

使用说明

编译构建

1. chardet4cj 目录下进行编译
cjpm update
cjpm build

执行用例

编译用例并执行,步骤如下:

1. 进入 chardet4cj/test/ 目录下创建 tmp 文件夹,然后编译测试用例
cd chardet4cj/test/
mkdir tmp
cjc -O2 --import-path xxxxx/chardet4cj/build/ -L xxxxx/chardet4cj/build/chardet4cj  -l chardet4cj_chardet4cj  -L xxxxx/chardet4cj/build/charset -l charset_charset.encoding -l charset_charset.simplechinese -l charset_charset.singlebyte -l charset_charset.korean -l charset_charset -l charset_charset.japanese -l charset_charset.unicode -l charset_charset.traditionchinese -l charset_charset.encoding -l charset_charset.simplechinese -l charset_charset.singlebyte -l charset_charset.korean -l charset_charset -l charset_charset.japanese -l charset_charset.unicode -l charset_charset.traditionchinese -l charset_charset.encoding -l charset_charset.simplechinese -l charset_charset.singlebyte -l charset_charset.korean -l charset_charset -l charset_charset.japanese -l charset_charset.unicode -l charset_charset.traditionchinese  test/LLT/test.cj -o tmp/test.cj.out --test
1.1 具体说明
  • cjc命令, -O2表示开启优化
cjc -O2
  • –import-path 导入chardet4cj库编译出来的库文件地址, 注意地址最后有"."
  • -L 导入库文件的完整路径
  • 导入多个库,每个库都需要–import-path和 -L
--import-path xxxxx/chardet4cj/build/ -L xxxxx/chardet4cj/build/chardet4cj -l chardet4cj_chardet4cj
  • -l 要导入的具体的包, 用"库名_包名"
  • 导入一个库中有多个包时,用多个 -l
--import-path xxxxx/chardet4cj/build/ -L xxxxx/chardet4cj/build/charset -l charset_charset.encoding -l charset_charset.simplechinese -l charset_charset.singlebyte -l charset_charset.korean -l charset_charset -l charset_charset.japanese -l charset_charset.unicode -l charset_charset.traditionchinese -l charset_charset.encoding -l charset_charset.simplechinese -l charset_charset.singlebyte -l charset_charset.korean -l charset_charset -l charset_charset.japanese -l charset_charset.unicode -l charset_charset.traditionchinese -l charset_charset.encoding -l charset_charset.simplechinese -l charset_charset.singlebyte -l charset_charset.korean -l charset_charset -l charset_charset.japanese -l charset_charset.unicode -l charset_charset.traditionchinese
  • 测试用例的完整路径和用例中引入文件的完整路径
  • -o 用例编译后输出的位置和名称, .out结尾, 一般使用"用例名称.out"
  • –test 用例编译命令结尾
xxxxx/chardet4cj/test/LLT/test.cj -o xxxxx/chardet4cj/test/tmp/test.cj.out --test
2. 把编译好的文件复制到 .out 文件下(chardet4cj/test/tmp/)
  • chardet4cj/build/chardet4cj/、chardet4cj/build/charset/ 目录中的文件都复制到 .out 文件位置(chardet4cj/test/tmp/ 中)
3. 进入到.out文件位置,执行用例
  • 进入到.out文件位置执行用例
cd xxxxx/chardet4cj/test/tmp/
  • windows系统打开cmd,输入.out文件完整名称即可执行
test.cj.out
  • Linux系统使用 ./.out文件完整名称
./test.cj.out

功能示例

基于 UTF-8 格式使用样例
import std.fs.*
import chardet4cj.*

main() {
    var testFile1: Path = Path("./utf8.txt")
    var originalEncoding1: String = UniversalDetector.detectCharset(testFile1)
    println(originalEncoding1)

    var testFile: Path = Path("./utf8n.txt")
    var originalEncoding: String = UniversalDetector.detectCharset(testFile)
    println(originalEncoding)

    if (originalEncoding1 != "UTF-8") {
        return 1
    }
    if (originalEncoding != "UTF-8") {
        return 2
    }
    return 0
}

执行结果如下:

UTF-8
基于 UTF-16BE 格式使用样例
import std.fs.*
import chardet4cj.*

main() {
    var testFiles2: File = File("./utf16be.txt",Open(true, false))
    var originalEncodings2: String = UniversalDetector.detectCharset(testFiles2)
    println(originalEncodings2)
    if (originalEncodings2 != "UTF-16BE") {
        return 1
    }
    return 0
}

执行结果如下:

UTF-16BE
基于 UTF-16LE 格式使用样例
import std.fs.*
import chardet4cj.*

main() {
    var testFiles2: File = File("./utf16le.txt",Open(true, false))
    var originalEncodings2: String = UniversalDetector.detectCharset(testFiles2)
    println(originalEncodings2)
    if (originalEncodings2 != "UTF-16LE") {
        return 1
    }
    return 0
}

执行结果如下:

UTF-16LE
基于 ISO-2022-CN 格式使用样例
import std.fs.*
import chardet4cj.*

main() {
    var testFiles: File = File("./utf8.txt",Open(true, false))
    var originalEncodings: String = UniversalDetector.detectCharset(testFiles)
    println("ISO-2022-CN")
    if (originalEncodings != "UTF-8") {
        return 1
    }
    return 0
}

执行结果如下:

ISO-2022-CN

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:gitee.com/MNxiaona/733GH

在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值