查看: 8189|回复: 36
收起左侧

[教程经验] 文件操作篇:5、实操内容-带中文字符文件读写

Z.Y.Q 2020-8-23 16:59:32 | 显示全部楼层 |阅读模式
邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
本帖最后由 Z.Y.Q 于 2020-8-26 18:08 编辑

中型PLC系列-文件操作篇

本课程分为基础内容和实操内容两部分,前者帮助大家了解文件操作基本内容,后者帮助大家快速上手应用。

基础内容:
1、文件操作的应用
2、文件操作函数库
3、文件操作函数 (附文件操作视频上篇)

实操内容:
4、TXT\CSV、U盘\SD卡文件读写&实操
5、带中文字符文件读写&实操(附文件操作视频下篇)

实操内容:5、带中文字符文件读写

1、常见字符编码

ASCII

ASCII:American Standard Code for InformationInterchange,美国信息互换标准代码。

ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。
标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,
数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。

image.png

英文表示基础字符有限,256位足够且有冗余,
世界上的国家和文字、符号太多,对于一些语言,
即使256位,也是不够用的,比如中文语言,
于是就开始扩展,出现了Unicode字符集。

UniCode

Unicode:统一码、万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。

Unicode是为了解决传统的字符编码方案的局限而产生的,
它为每种语言中的每个字符设定了统一并且唯一的二进制编码,
以满足跨语言、跨平台进行文本转换、处理的要求

image.png

UTF-8、UTF-16

UTF-8:8-bit Unicode Transformation Format,是一种针对Unicode的可变长度字符编码,
内容一般有1-6个字节。

UTF-16:把Unicode字符集的抽象码位映射为16位长的整数(即码元)的序列,用于数据存储或传递,
缺点是无法与ASCII兼容,且字符内容有限。

UTF-8编码示例:

image.png

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。
因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。

2)对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,
后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。

2、一般编码关系

现在计算机系统通用的字符编码工作方式:

1、在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
2、用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,
编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。

image.png

3、Txt中编码类型说明

image.png

1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对 Windows 简体中文版,如果是繁体中文版会采用 Big5 码)。

2)Unicode编码,即直接用两个字节存入字符的 Unicode 码,UniCode,这个选项用的 little endian 格式。
     little endian  和 big endian是编码方式的区别

3)汇川中型PLC编码施行标准为GB13000-2010,中文字符以双字节存储。

image.png

4、PLC中UTF-16与UTF-8的转换

带中文字符读写时,最标准和稳妥的方法可以直接使用转换函数,写入
时将PLC的字符串编码变为标准的UTF-8格式,。

如图:
在库管理器中添加StringUtils工具库,我们使用其中的
ConvertUTF16toUTF8 和 ConvertUTF8toUTF16函数。
image.png

函数使用如下:

image.png

5、PLC中带中文字符读写方法

只推荐两种,提前修改文件格式的这种方法不推荐,使用太麻烦。

1、UTF-16转换成UTF-8

这个方法上文已经介绍,一般这种方式TXT文件直接写入,直接打开不会造成乱码。
但是在写CSV格式时仍会有乱码现象,原因后面再介绍。

如图,CSV打开文件内中文字符是乱码。
image.png
打开方式选使用记事本
image.png
可以看到内容是没有乱码的
image.png
这时我们将文件另存为,编码方式选择UTF-8。
image.png
再打开CSV发现乱码现象已经消失。
image.png

同样的,使用功能更为强大的NotePAD++也可以
image.png
选择UTF-8编码。

image.png
保存。

image.png

2、优化UTF-16转UTF-8

除了编码方式导致的乱码外,在Windows环境下,
对于 CSV 文件等,Excel 需要它有一个元信息来说明它的编码,
微软自定义了一个格式叫  BOM 头,
这个 BOM 头在被其他的表格展示器(比如 Numbers 或者 Libre Office)打开的时候会被忽略,
但对 Excel 就很关键。
所以可以在所有写操作前,我们先将BOM的信息内容写入TXT文件或CSV文件,这样就可以省去修改文件格式等操作。

表头在网上可以查找到相关信息,我们直接说结论。
先将表头信息在写正式内容前写入文档中。

这两种是BOM头中UTF-8的表现形式
STRING类型:$ef$bb$bf
WSTRING类型:$FEFF
表头信息只要在文档正式内容写入前,写入一次即可,不需要每次重复写。

STRING:
image.png
WSTRING:
image.png
这里都是随内容一起写入了,也可以分开写。

直接打开文档,可以看到,这种情况下CSV将不会再发生乱码现象。

image.png

6、视频课程讲解&实操

晚点补上视频链接和示例程序讲解


附件内容:
压缩文件包内是综合的示例程序

File Operation.7z (74.82 KB, 下载次数: 247, 售价: 20 )





上一篇:六种语言编写流水灯控制实训
下一篇:有没有什么功能块用于拼接字符串

已有 0 人打赏作者

回复 邀请回答送花

使用道具 举报

guohua833258 2020-8-24 08:39:13 | 显示全部楼层
汇川的功能实在是强大,可以比肩西门子了
回复 送花

使用道具 举报

博望侯1988 2020-8-24 11:42:10 | 显示全部楼层
如果官方能对这些功能进行更好的封装,比如像倍福一样,那就更方便使用了~~期待~~
回复 送花

使用道具 举报

H_alpha 2020-9-1 12:26:19 来自手机 | 显示全部楼层
树叶过河全靠浪 发表于 2020-8-24 08:54

棒棒的!!!
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部