您的位置:首页 > 编程语言 > C语言/C++

使用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字符编码进行特殊处理,转换成普通空格。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: