学习LabVIEW(十一)——UTF8字符串解码

2015-08-19 11:40:13来源: eefocus
    之前在《同步Android设备和Windows PC的Clipboard》中,我们用Python实现了一套PC和Android的Clipboard同步程序,其中通信方式使用的是UDP。我今天想,在LabVIEW中实现UDP通信的程序框图会是一个什么样子呢?可能会比较麻烦吧。试过之后,才发现,简易的UDP通信并不麻烦,麻烦的是字符串的编解码问题。我们在Android上实现的脚本通过UDP传输使用UTF8编码过的字符串,而LabVIEW(Windows平台)显然不支持UTF8字符串的解码,Google之后才知道LabVIEW使用系统默认的编码,在中文的Windows中,大概用GBK就可以。我又继续Google了LabVIEW中有什么节点可以实现字符串的编解码,结果出人意料的是没有,大家都是通过调用dotNET的方式实现编解码的。本《学习LabVIEW》之前有好几篇都是讨论调用dotNET对象的,所以使用dotNET并没有什么问题,但是这里我想换一种方式:通过MATLAB节点实现字符串的解码。可能有人会觉得奇怪,MATLAB也能做这种事情吗?答案是肯定的,在好多年前,我们在《我发现Matlab可以用来解乱码》中就利用MATLAB的unicode2native和native2unicode实现过这样的操作。
    首先还是看一下UDP通信的问题。Android端的QPython脚本如下:


这个脚本会向IP地址为192.168.1.153的机器的32500端口发送当前Android设备的Clipboard中的文本,文本使用utf-8编码。
    那么在接收端,需要创建一个UDP节点监听32500端口的数据,在LabVIEW中使用节点“打开UDP”和“读取UDP数据”即可。其中“读取UDP数据”有一个设置超时的参数,将它设为-1即可实现无限等待。看到这里大概群里无聊的文艺程序员又能发现写情书的新句型:waitYou(timeout=-1)。真是受不了这群人。
    利用While(True)循环,框在“读取UDP数据”的外面,即可实现一个无止境的监听过程。到这里基本问题就解决了。但是正如前文所述,没有想到的,真正麻烦的是字符串的编解码问题。我插入了一个MATLAB节点,首先的想法是将输入和输出设置为字符串类型,在节点内部的MATLAB脚本中使用unicode2native和native2unicode实现解码,但是发现不好用,因为LabVIEW的中文字符串数据在传入到MATLAB的过程中就已经损坏了,再怎么解码也不可能正确解出来。所以我换了一个做法,以数值数组作为MATLAB节点和LabVIEW交互的数据类型,而数值数组里面就是字符串的代码。一般来说选择字节数组肯定是没问题的,但是MATLAB节点的端口没有字节数组类型,所以只好指定为1D Array of Real。
    在输入端,我们先使用LabVIEW的“字符串到字节数组”节点,将字符串转换成字节数组,传递给MATLAB节点的输入端,尽管MATLAB的输入端是1D Array of Real类型,LabVIEW能够很好地进行类型转换。MATLAB脚本利用native2unicode将UTF8字符串转换成Unicode表示,然后利用unicode2native将Unicode字符串转换成GBK编码,这是的数据时uint8数组,然而MATLAB中的uint8数组似乎不能被LabVIEW自动转换成LabVIEW的double数组,所以我在MATLAB中添加了double()将uint8数组转成double数组。
    数据离开MATLAB节点后,利用LabVIEW的“字节数组到字符串”节点将数值数组转换成字符串,并连接到“字符串显示”控件上。程序就完成了。程序框图如下图所示:

试验一下UDP数据传输和字符串解码。首先在Android平板中复制一段中文文本:


复制之后,打开QPython,执行传输数据的脚本:


执行了脚本之后,LabVIEW成功接收到数据,并将数据中的UTF-8字符串解码,呈现到了“字符串显示”控件中,如下图所示:


大功告成。

关键字:LabVIEW  UTF8  字符串解码

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/Test_and_measurement/2015/0819/article_12835.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
LabVIEW
UTF8
字符串解码

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved