转载请注明出处。chendesheng1988是原作者。

问题描述:射频模块读取证件信息后,串口读取的信息存到SD卡,存进去发现汉字是乱码。

解决方案:使用函数WideCharToMultiByte搞定这个问题。

关键词:unicode,ANSI,WideCharToMultiByte,LPCWSTR

解决的过程大概描述如下:

(1)把存放从串口读进来的数据的recvBuf进行强制类型转换,(LPCWSTR)recvBuf,既表示转换为32位的unicode码,也是为了满足WideCharToMultiByte函数第三个参数类型的要求

(2)根据WideCharToMultiByt函数参数的要求,定义一个接收转换后字符的buffer。可以定义为char *buffer;

int WideCharToMultiByte(

UINT CodePage,

DWORD dwFlags,

LPCWSTR lpWideCharStr,

int cchWideChar,

LPSTR lpMultiByteStr,

int cbMultiByte,

LPCSTR lpDefaultChar,

LPBOOL lpUsedDefaultChar

);

(3)再利用这个函数计算recvBuf的size,方法如下:

int size = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)recvBuf, -1, NULL, 0, NULL, NULL);

(4)再次利用这个公式进行宽字符到多字节的转换,方法如下:

WideCharToMultiByte(CP_ACP, NULL, (LPCWSTR)recvBuf, -1, buffer, size + 1, NULL, NULL);

(5)最后利用fputc函数将,将这个buffer里的内容存到SD卡即可。方法如下:

FILE *out=NULL;

if((out=fopen("\\Storage Card\\IDinfo.txt","a+"))==NULL)

{

printf("can not open file! \n");

exit(0);

}

else

printf(" open file sucess! \n");

for(i=9;i<165;i++)  //这里i的起始和终止条件是根据我的需要设的,不要奇怪

{

wchar_t ch =buffer[i];

fputc(ch,out);

}

fclose(out);

(6)使用这个方法后,我很激动把SD卡里的IDinfo.txt文件拷贝到PC上,打开那一瞬间,整整齐齐的汉字出现在我的面前,再也不是以前的乱码了。兴奋。

结语:虽然方法简单的说大概是这么个样子,但里面涉及的字符编码格式很值得我再去认真研究,搞清楚wince里的unicode,以及ANSI标准。还是愿意再写一篇学习心得,有关于这个字符编码的。在解决问题的过程中,在网上查找了大量的资料,非常感谢那些愿意在网上公开免费的分析自己知识的前辈们。我也乐于把我的心得跟大家分享。

我的SD卡乱码解决方案的更多相关文章

  1. 3、树莓派的配置:改静态IP、连接ssh、安装中文字体、安装谷歌输入法、增加USB电流、修改触摸屏分辨率、扩展sd卡空间、修复vi和vim乱码问题、安装配置远程桌面vnc

    本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ1222698 1.连接上HDMI线,插上触摸屏,插上键盘,鼠标,网线,启动.系统正常启动,但是一直闪烁,不停的黑屏,是由于触摸屏的usb口供电不 ...

  2. 6、android 普通日志输出到SD卡

    这是本人见过写博文最负责的一个人: http://www.crifan.com/android_try_use_android_logging_log4j_to_output_log_to_sd_ca ...

  3. Ye.云狐J2刷机笔记 | 完美切换内部存储卡和SD卡的改法.vold.fstab

    ================================================================================Ye.完美切换内部存储卡和SD卡成功.v ...

  4. 蜂鸟A20开发板刷 cubietruck 的 SD 卡固件

    美睿视讯 为蜂鸟A20准备的 MerriiLinux 功能非常简陋.所以能用上主流的 debian 或者 LUbuntu 就可以说是非常迫切的需求了.蜂鸟A20(Merrii Hummingbird ...

  5. SPI模式下MCU对SD卡的控制及操作命令

    一.前言 SD 卡有两个可选的通讯协议:SD 模式和 SPI模式 SD 模式是SD 卡标准的读写方式,但是在选用SD 模式时,往往需要选择带有SD 卡控制器接口的 MCU,或者必须加入额外的SD卡控制 ...

  6. 创见WiFi SD卡破解之路

    我最近搞了张Transcend WiFi SD,颇为得意.它可以让我在几秒钟内将单反(奶昔,相当便携)中拍摄的照片传到任何支持wifi的设备上.我很喜欢在旅途中拍摄和分享图片,所以对我而言,可以无线传 ...

  7. Android开发之下载Tomcat服务器的文件到模拟器的SD卡

    Tomcat服务器可以到Apache的官网去下载http://tomcat.apache.org/,如何配置和使用百度下也有很多介绍,只要把Java的SDK配下java_home环境变量就行了,因为T ...

  8. 4安德鲁斯.2.2在系统,具有系统权限的应用程序无法读取或写入SD卡

    有两个解决方案: 1.通过改动android系统的源代码,开放SD卡的读写权限,具体的改动方法和说明.能够參考网上资料http://www.ifeegoo.com/android-debug-stat ...

  9. SPI模式下MCU对SD卡的控制及操作命令(转)

    源:SPI模式下MCU对SD卡的控制及操作命令 一.前言 SD 卡有两个可选的通讯协议:SD 模式和 SPI模式 SD 模式是SD 卡标准的读写方式,但是在选用SD 模式时,往往需要选择带有SD 卡控 ...

随机推荐

  1. 【解决】WordPress FTP连接服务器时出错,请检查设置,WordPress需要访问您网页服务器的权限

    刚装好wordpress,发现后台预装了两个插件,想删掉,结果要登录FTP,死活登不上去,提示"连接服务器时出错,请检查设置,WordPress需要访问您网页服务器的权限",网上也 ...

  2. ajax与Servlet

    1.后台返回text类型的数据 <%@ page language="java" import="java.util.*" pageEncoding=&q ...

  3. RadioGroup单选按钮排版

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  4. jquery插件--多行文本缩略

    1.webkit内核多行缩略样式 text-overflow:ellipsis; display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orie ...

  5. Android WebView支持WebGL

    Android从5.0开始默认支持WebGL,我在实际开发中遇到了一些5.0设备不支持的情况,原来Chromium对运行GPUs不稳定的或者有兼容性问题的设备会禁用WebGL.在Android平台可以 ...

  6. 纪录一个table元素里面的tr th td

    <table border="1"> <tr> <th>name</th> <th>sex</th> < ...

  7. 你好,C++(30)“大事化小,小事化了”5.4.3 工资程序成长记:函数

    5.4.3 工资程序成长记:函数 自从上次小陈“程序员”的工资程序得到老板的夸奖,口头许诺给他涨工资以后,老板再也没有找过他,涨工资的事自然也就没有下文了.这天,老板又突然召他去办公室.这下可把小陈高 ...

  8. PHPCMS V9二次开发]自定义字段模型-文本组

    phpcms v9,我们在做类似于酒店房型等类型的时候,需要用到文本组字段模型,但phpcms并未提供该模型.如下图所示效果: 展示效果如下: 步骤/方法 打开phpcms\modules\conte ...

  9. C#中的委托和事件2-1(转)

      PDF 浏览:http://www.tracefact.net/Document/Delegates-and-Events-in-CSharp.pdf引言 委托 和 事件在 .Net Framew ...

  10. C#实现打印与打印预览功能(转)

    在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .Net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这 ...