WP8 客户端C# UTF8 字符在转C++ 宽字符时失败问题。

有一段时间一直为编码格式的问题烦恼,某些编辑器在保存为UTF-8文件后,wp 客户端在从C#代码读取后转给C++保存为宽字符时,文本全部丢失,后查看官方文档:http://msdn.microsoft.com/zh-cn/library/vstudio/t3ayayh1 发现是EILSEQ错误,即有“非法字节序列”,可某些编辑器处理后没有这个问题。

在仔细区别两种编辑工具最后生成的文件时发现有3字节的容量差,网上就开始搜索,发现还真有人总结出来是由于UTF8 带BOM 与 无BOM 的差别导致(原博客地址:http://www.cnblogs.com/08shiyan/archive/2013/04/19/3031257.html)。

其中,当带BOM时WP宽字符转换会出现失败。因此当字节流开头为(EF BB BF)时去除(已验证), 或通过 new UTF8Encoding(false) 忽略BOM头即可解决。再次感谢原博主的帮助。

时间: 2024-11-05 12:27:30

WP8 客户端C# UTF8 字符在转C++ 宽字符时失败问题。的相关文章

通过编写串口助手工具学习MFC过程——(三)Unicode字符集的宽字符和多字节字符转换

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (三)Unicode字符集的宽字符和多字节字符转换 在上一节<(二)通过&qu

宽字符wchar_t和窄字符char——putwchar、wprintf

宽字符wchar_t 与 窄字符char 先说下窄字符char,这个大部分读者应该很清楚,char类型的变量占一个字节(byte)(也就是8个bit(比特)),能表示256个字符,那char的范围有两种 第一种(signed char):-128~127 第二种(unsigned char):0~255 (对char的范围感兴趣的读者可以看一下这篇文章:浅谈char类型范围) 但C标准并没有规定char 应该是unsigned还是signed,C标准定义了三种类型:char.signed cha

[转] C++宽字符操作函数

字符分类: 宽字符函数         普通C            函数描述 iswalnum()      isalnum()       测试字符是否为数字或字母 iswalpha()       isalpha()        测试字符是否是字母 iswcntrl()         iscntrl()         测试字符是否是控制符 iswdigit()         isdigit()         测试字符是否为数字 iswgraph()      isgraph() 

宽字符、多字节、unicode、utf-8、gbk编码转化

今天遇到一个编码的问题,困惑了我很长时间,所以就简要的的了解了一下常用的编码类型. 我们最常见的是assic编码,它是一种单字节编码,对多容纳256个字符. 我们在编程的时候经常遇到unicode,unicode是一种宽字节编码,能够很好的融合世界各个国家的字符,具有国际通用性,所谓宽字符其实使用两个字节来表示一个符号. 而utf8是一种多字节编码,一个字符所占用的字节数不确定,是对unicode的精简版本,也用具有世界通用性.Gbk也是一种双字节编码,其实就是对中文简体的一种编码,不具有世界通

(转)C++ UTF8 UrlEncode(宽字符)

#include <stdio.h> #include <wchar.h> #include <Windows.h> #include <string> using namespace std; const wchar_t * hexenc[] = { L"%00", L"%01", L"%02", L"%03", L"%04", L"%05&quo

彻底弄懂UTF-8、Unicode、宽字符、locale

目录 Unicode.UCS UTF8 结论: 宽字符类型wchar_t locale 为什么需要宽字符类型 多字节字符串和宽字符串相互转换 最近使用到了wchar_t类型,所以准备详细探究下,没想到水还挺深,网上的资料大多都是复制粘贴,只有个结论,也没个验证过程.本文记录探究的过程及结论,如有不对请指正. Unicode.UCS UCS(Universal Character Set)本质上就是一个字符集. Unicode的开发结合了国际标准化组织所制定的?ISO/IEC 10646,即通用字

宽字节(宽字符)注入

字节注入也是在最近的项目中发现的问题,大家都知道%df' 被PHP转义(开启GPC.用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\',其中\的十六进制是 %5C ,那么现在 %df\' =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MYSQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗',也就是说:%df\' = %df%5c%27=縗',有了单引号就好注入了.比如: $conn = mysql_connect("lo

5. 宽字符注入详解与实战

宽字节注入源于程序员设置MySQL连接时的错误配置,如下: set character_set_client=gbk 这样的配置会引发编码转换从而导致绕过某些防护实现注入漏洞.具体分析一下原理: 正常情况下GPC开启或者使用addslashes函数过滤GET或POST提交的参数时,我们测试输入的',就会被转义为\'; 若存在宽字节注入,输入%df%27时,经过单引号的转义变成了%df%5c%27,之后再数据库查询语句进行GBK多字节编码,即一个中文占用两个字节,一个英文同样占用两个字节且在汉字编

【字符编码】彻底理解字符编码

一.前言 在解决昨天的问题时,又引出了很多新的问题,如为什么要进行编码,这些编码的关系如何,如ASCII,IOS-8859-1,GB2312,GBK,Unicode之间的关系,笔者想要彻底理解字符编码背后的故事,遂进行了探索,具体笔记如下.如园友能读完本篇文章,我相信会解开很多疑惑. 二.字符编码 2.1 为何需要编码? 我们知道,所有的信息最终都表示为一个二进制的字符串,每一个二进制位(bit)有0和1两种状态.当我们需要把字符'A'存入计算机时,应该对应哪种状态呢,存储时,我们可以将字符'A