windows10下从gb2312转utf8

起因

因为单片机通过wifi模块向电脑中发送字符串数据,然后电脑这边运行一个c++程序,开启tcp服务器端,接收数据,因为数据是gb2312编码的,因此,当我把电脑的locale编码改成utf8之后,ANSI就变成了utf8,从而函数MultiByteToWideChar中的CP_ACP也就是utf8,因此我想通过代码将gb2312的数据转为utf8,就总是失败的,最后无解,我只好把电脑的编码又改回了gb2312也就是cp936。然后再通过代码,就可以完美的将gb2312编码的字符串转成utf8编码的了。
想想微软也真是气人,就不能把CP_ACP直接指向GB2312吗,非要指向自己的ANSI,真的是烦。

printf()

函数

char *revData = ""
printf("%x", revData[index])

因为revData是char的字符串,char是有符号的,而printf函数会把负数的char左延拓,然后就会打印出ffffff来,并不会打印出我们想要的字节,在c语言中,字节类型也是unsigned char。参考这里以及这里这里、还有这里。应该写成这样

printf("%x", (unsigned char)revData[index])

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 易语言作为一种比较流行的编程语言,在编码过程中有时需要对编码进行换,其中GB2312和UTF-8都是常见的编码方式。以下是易语言GB2312UTF-8编码的教学过程。 首先,我们需要先创建一个易语言工程,并添加主程序和界面程序。然后,在界面程序中添加一个按钮和一个编辑框,按钮上设置“换”文字。接着,我们需要在按钮的单击事件中添加相关的代码。 在代码中,我们先获取编辑框中的文本,然后使用gb2utf8函数进行编码换。具体操作如下: 1. 在“眼睛”选项卡中勾选“不编译主程序全局变量”。 2. 在“编译”选项卡中勾选“添加tu2f8文件”。 3. 在按钮单击事件中添加以下代码: ``` 编辑框内容 = 界面信息框内容读取(1, 1); 编码换结果 = gb2utf8(编辑框内容); 界面信息框内容清空(2, 1); 界面信息框内容输出(2, 1, 编码换结果); ``` 其中,编辑框内容为原始文本,界面信息框用于输出换后的结果。 4. 添加模块tu2f8.txt并添加以下代码: ``` //模块名称:tu2f8 //作者:youngsterxyf //介绍:GB2312UTF-8编码 //版本:1.0 def gb2utf8(GBString): t = GBString.split(CHR(0)+CHR(0)) if len(t) > 1: t0 = t.pop(0) return t0 + CHR(0) + CHR(0) + ''.join([chr(b) for b in bytes(t[0], 'gb2312')]).encode('utf-8').decode() else: return ''.join([chr(b) for b in bytes(GBString, 'gb2312')]).encode('utf-8').decode() ``` 以上就是易语言GB2312UTF-8编码的教学过程,大家可以自行尝试编写并练习。注意,以上代码仅作为演示,具体实现还需要按照自己的需求进行修改。 ### 回答2: 简单来说,将易语言采用的gb2312编码换为utf8编码,可以分为以下几个步骤: 第一步,将gb2312编码换为Unicode编码。在易语言中,可以使用Str.UnicodeToStr函数实现换,例如: UnicodeCode = Str.UnicodeToStr(GBCode, "gb2312") 这里的GBCode就是原始的gb2312编码字符串,UnicodeCode则是换后的Unicode编码字符串。 第二步,将Unicode编码换为utf8编码。同样地,使用Str.UnicodeToUTF8函数可以实现换,例如: UTF8Code = Str.UnicodeToUTF8(UnicodeCode) 这里的UnicodeCode就是第一步换后得到的Unicode编码字符串,UTF8Code则是换后的utf8编码字符串。 第三步,将utf8编码重新写入文件。由于utf8编码是一种多字节编码方式,所以要使用二进制方式打开文件,并写入换后的utf8编码数据。使用EasyFile对象可以方便地实现这一过程,例如: File.Open(EasyFilePath, fmOpenWrite or fmShareExclusive or fmShareDenyNone) File.Seek(0, fssoFromEnd) File.Write(UTF8Code) File.Close() 这里的EasyFilePath就是要写入的文件路径,fmOpenWrite指示以写方式打开文件,fmShareExclusive指示以独占方式共享文件,fmShareDenyNone指示不限制其他进程或线程的访问权限,File.Write函数则将换后的utf8编码数据写入文件。 通过以上几个步骤,就可以将原始的gb2312编码字符串换为utf8编码字符串,并写入文件中。需要注意的是,在进行编码换时,需要确保原始数据的编码方式正确,否则会产生换错误或乱码等问题。 ### 回答3: 易语言是一种高级编程语言,可以用来开发Windows系统下的应用程序。它的编码方式分为两种:gb2312和utf-8。 gb2312是中文字符集,最多可以表示6763个汉字和682个非汉字字符。utf-8则是一种Unicode编码格式,它支持全球各地的语言,包括中文。 在易语言中将gb2312换为utf-8编码可以使用以下方法: 1. 打开易语言软件,创建一个新的工程,并打开主模块。 2. 在主模块中新增一个按钮,以便触发换操作。 3. 在按钮的单击事件中,编写代码以便将gb2312换为utf-8编码。 4. 代码中需要使用相关的函数,如“gbktoUtf8”函数和“mbslen”函数等。 例如,在单击事件代码中,可以使用以下代码: procedure Button1_OnClick; var   str: string;   len: integer; begin   str := '易语言编程';   len := mbslen(str);   SetLength(str, len + 1);   gbktoUtf8(PChar(str));   Messagebox('换后的字符串为:' + str); end; 5. 在运行程序后,点击按钮会将gb2312编码的字符串换为utf-8编码,并将换后的字符串显示在消息框中。 总之,易语言gb2312utf8编码需要借助相关的函数和代码来实现。如果了解相关的函数和编码知识,便可以轻松完成这个任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值