幽灵行动4未来战士乱码(幽灵行动荒野steam密钥)

一、Wstring类型介绍:

数据类型为 WSTRING (宽字符串)的操作数用于在一个字符串中存储多个数据类型为 WCHAR 的 Unicode 字符。意味着WSTRING类型可看做是Wchar类型数组,也可在字符串中使用中文字符。声明数据类型为 WSTRING 的操作数时,可使用方括号定义其长度(例如,WSTRING[10])。如果不指定长度,则在默认情况下,将 WSTRING 的长度设为 254 个字符。可声明最多 16382 个字符的长度 (WSTRING[16382])。

一个Wchar变量是由两个字节存储的。且西门子中编码规则是Unicode字符。

//字符在单引号中指定,并且始终通过限定符 WSTRING# 指定。#Axis[#index].AxisName := WString#'下压伺服';

幽灵行动4未来战士乱码(幽灵行动荒野steam密钥)插图

幽灵行动4未来战士乱码(幽灵行动荒野steam密钥)插图1

Wstring示例

二、汇川IT7070E触摸屏

幽灵行动4未来战士乱码(幽灵行动荒野steam密钥)插图2

IT7070E中新建变量

幽灵行动4未来战士乱码(幽灵行动荒野steam密钥)插图3

博途中新建变量

幽灵行动4未来战士乱码(幽灵行动荒野steam密钥)插图4

程序运行效果

关键的来了,在确认都没有问题的时候,触摸屏却显示出来了乱码。

幽灵行动4未来战士乱码(幽灵行动荒野steam密钥)插图5

IT7070E显示效果

经过查证资料,在IT7070E中汉字编码规则是GBK编码。与西门子的Unicode编码不符造成的。

三、编码基础:

编码是指计算机中的二进制和字符集的对应关系。

编码格式:是指如何进行编码存储和传输。

1,一个字节被分为8位二进制,总共有256种编码方式。

2,ASCII 码:我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。

3,非ASCII 码:英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。

3,GBK 标准:用两个字节来表示汉字,第一个字节称为高字节,第二个字节称为低字节。第一个字节大于127则表示 是一个汉字。

幽灵行动4未来战士乱码(幽灵行动荒野steam密钥)插图6

GBK编码概览

4,Unicode标准:ISO制定了一个双字节的字符集包含了世界上所有的字符,统一采用16位来统一表示所有的字符,对于ascii里的字符,UNICODE 保持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于"半角"英文符号只需要用到低8位,所以其高 8位永远是0。GBK主要用来对汉字和英文字母编码,Unicode不仅可以对汉字编码,还可以对其他语言进行编码,是一个大一统的编码表。从字符编码的范围上讲ASCII < GBK < Unicode。

5,UTF8:使用1到4个字节表示每个字符,具有很好的兼容性和灵活性,特别适合网络传输,是互联网上最常用的Unicode实现方式

6,UTF16:使用2个或4个字节表示每个字符,是许多现代操作系统和程序环境的内部编码方式,如Java和Windows。

7:,UTF32:每个字符固定使用4个字节,简化了字符的处理,但相比于UTF-8和UTF-16,它的数据量要大得多。

四、乱码解决办法:

说了这么多,应该是字节大端、小端的问题,试一试的心态,添加了如下代码

//REGION 自动信息提示文本 Unicode 转换成GB FOR #i := 1 TO 20 DO "DB5010_DataBus".HomeStepComment[#i] := SWAP("DB5010_DataBus".HomeStepComment[#i]); END_FOR; //END_REGION

显示正常、搞定

幽灵行动4未来战士乱码(幽灵行动荒野steam密钥)插图7

绕了这么大一圈,为什么要这么麻烦,显示中文很多种办法,偏偏选这个这不是作死嘛?

我个人认为还是蛮有用的,不如,在设备自动运行时,我们可以用这种办法给用户已提示信息,这样只要在PLC中直接改显示内容就可以了(如下),不需要改触摸屏的程序,避免了软件之间的来回切换,大大的方便了。

CASE #StepNo OF 0: #StepComment := WSTRING#'设备回原位开始'; 10: #StepComment := WSTRING#'伺服回原位'; 20: #StepComment := WSTRING#'伺服去位置1'; 30: #StepComment := WSTRING#'气缸关闭'; 990: #StepComment := WSTRING#'回原位完成'; ELSE #StepComment := WSTRING#'';END_CASE;