使用c++11标准库转换字符编码
2013-01-06 21:02
281 查看
#include<stdio.h>
#include<locale>
#include<codecvt>
conststd::stringws2s(conststd::wstring&src)
{
std::localesys_locale("");
constwchar_t*data_from=src.c_str();
constwchar_t*data_from_end=src.c_str()+src.size();
constwchar_t*data_from_next=0;
intwchar_size=4;
char*data_to=newchar[(src.size()+1)*wchar_size];
char*data_to_end=data_to+(src.size()+1)*wchar_size;
char*data_to_next=0;
memset(data_to,0,(src.size()+1)*wchar_size);
typedefstd::codecvt<wchar_t,char,mbstate_t>convert_facet;
mbstate_tout_state=0;
autoresult=std::use_facet<convert_facet>(sys_locale).out(
out_state,data_from,data_from_end,data_from_next,
data_to,data_to_end,data_to_next);
if(result==convert_facet::ok)
{
std::stringdst=data_to;
delete[]data_to;
returndst;
}
else
{
printf("converterror!\n");
delete[]data_to;
returnstd::string("");
}
}
conststd::wstrings2ws(conststd::string&src)
{
std::localesys_locale("");
constchar*data_from=src.c_str();
constchar*data_from_end=src.c_str()+src.size();
constchar*data_from_next=0;
wchar_t*data_to=newwchar_t[src.size()+1];
wchar_t*data_to_end=data_to+src.size()+1;
wchar_t*data_to_next=0;
wmemset(data_to,0,src.size()+1);
typedefstd::codecvt<wchar_t,char,mbstate_t>convert_facet;
mbstate_tin_state=0;
autoresult=std::use_facet<convert_facet>(sys_locale).in(
in_state,data_from,data_from_end,data_from_next,
data_to,data_to_end,data_to_next);
if(result==convert_facet::ok)
{
std::wstringdst=data_to;
delete[]data_to;
returndst;
}
else
{
printf("converterror!\n");
delete[]data_to;
returnstd::wstring(L"");
}
}
conststd::stringws2utf8(conststd::wstring&src)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>>conv;
returnconv.to_bytes(src);
}
conststd::wstringutf8_2_ws(conststd::string&src)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>>conv;
returnconv.from_bytes(src);
}
遇到0X2C0XA0的UTF8字符编码进行特殊处理,转换成普通空格。
相关文章推荐
- 使用c++11标准库转换字符编码
- mb_convert_encoding 函数的使用 转换字符编码
- 使用Java将中文字符转换成Unicode编码
- linux使用iconv在不同字符编码中转换
- 使用 Java 将中文字符转换成 Unicode 编码
- 字符编码、字符存储、字符转换及工程中字符的使用
- 二者都是将 byte[] 转换成字符串,一个区别在于 Convert.ToBase64String 使用 base 64 数字编码,所以它生成的全部是 ASCII 字符。
- 使用iconv命令轻松实现linux下字符集编码的转换
- filter 转换字符编码
- j2me常用的字符,日期,以及转换编码实现
- 解决 Eclipse 下使用 Ant 编译出现问题: 警告:编码 GBK 的不可映射字符
- jenkins 使用 maven的pom.xml编译的时候提示 错误: 编码GBK的不可映射字符
- 字符编码-使用c#研究
- 中文字符编码的相互转换(五)
- cocos2d-x工程中,让xcode4.6能够使用C++11标准库
- 字符编码转换_进制转换(GB2312,GBK,JNI,HexTOStr)
- 编码格式的转换与使用
- IOS UIWebView 使用 loadHTMLString 加载 特殊字符编码后的字符 方案解决
- 避免Gson使用时将一些字符自动转换为Unicode转义字符
- QT下中文字符编码的转换