转载请注明出处。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. 在Blade中结合gperftools检查内存泄露

    Blade是我们开发的大规模C++项目构建工具. gperftools是google开发的性能工具,由高效内存分配器,CPU性能分析器,堆分析器,堆检查器等工具组成. 和其他构建工具不同,结合gtes ...

  2. Wpf解决TextBox文件拖入问题、拖放问题

    在WPF中,当我们尝试向TextBox中拖放文件,从而获取其路径时,往往无法成功(拖放文字可以成功).造成这种原因关键是WPF的TextBox对拖放事件处理机制的不同, 解放方法如下: 使用Previ ...

  3. Windows系统创建硬链接文件

    源文件夹:E:\深海 创建新硬链接文件夹:D:\微云同步盘\719179409\4-工作资料\深海   打开命令提示符(管理员) 敲入以下命令:   创建成功后,进入目录 D:\微云同步盘\71917 ...

  4. zxing生成和解析二维码

    今天忙了一天的二维码,用了QRcode和ZXing两个开源包.结果发现 ZXing比QRcode更好用一些,它直接可以定义二维码生成图案的大小,而QRcode生成的二维码是根据二维码包含的内容多少来定 ...

  5. 删除所有ecshop版权和logo

    前面我们已经讲过如何删除ecshop的版权,但是还有很多人不会,今天就详细的讲下如何删除所有ecshop版权和logo 前台部分: 1:去掉头部TITLE部分的ECSHOP演示站 Powered by ...

  6. 英文版Ubuntu 安装中文输入法

    一.安装语言包 (系统默认会安装中文简体语言包) System Settings-->Language Support-->Install/Remove Languages 二.安装IBU ...

  7. ios 实时刷新屏幕

    index=; // timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:layer selector:@selector(setNe ...

  8. web安全:click jacking

    点击劫持  click jacking通过iframe加载被攻击网站到黑客自己维护的网站通过z-index叠加和position定位,将2个网站的信息堆叠在一个立体投影面上,通过opacity设置透明 ...

  9. 路由器WDS桥接教程

    因为有吧友买了此款路由又不会桥接,因此做这个教程.老鸟自动路过,废话不多说,下面开始讲解. 1.wifi密码破解和路由器用户名和密码部分请自行解决,我只讲桥接部分.首先,在浏览器里输入192.168. ...

  10. 『安全工具』注入神器SQLMAP

    Pic by Baidu 0x 00 前言 正是SQLMAP这种神器的存在,SQL注入简直Easy到根本停不下来.... PS:国内类似软件也有阿D,明小子,挖掘机,当你用过他们之后你才会发现SQLM ...