#include "StringCode.h"
#include "iconv.h"
StringCodec::StringCodec()
{
}
StringCodec::~StringCodec()
{
Close();
}
StringCodec::StringCodec(const std::string& to, const std::string& from)
{
m_pHandle = (void *)-1;
Open(to, from);
}
StringCodec::StringCodec(Charset::Type to, Charset::Type from)
{
m_pHandle = (void *)-1;
Open(to, from);
}
std::string StringCodec::GetCharsetName(Charset::Type charset)
{
switch (charset)
{
case Charset::MAC:
return "MACINTOSH";
case Charset::ShiftJIS:
return "SHIFT_JIS";
case Charset::Hangeul:
return "CP949";
case Charset::Johab:
return "JOHAB";
case Charset::GB18030:
return "GB18030";
case Charset::ChineseBIG5:
return "BIG5-HKSCS";
case Charset::Greek:
return "Greek";
case Charset::Turkish:
return "CP1254";
case Charset::Vietnamese:
return "CP1258";
case Charset::Hebrew:
return "Hebrew";
case Charset::Arabic:
return "Arabic";
case Charset::Baltic:
return "CP1257";
case Charset::Russian:
return "CP1251";
case Charset::Thai:
return "CP874";
case Charset::EastEurope:
return "CP1250";
case Charset::UTF8:
return "UTF-8";
case Charset::Windows1252:
return "windows-1252";
case Charset::UTF32LE:
return "utf-32";
case Charset::UTF32BE:
return "utf-32BE";
case Charset::Korean:
return "ks_c_5601-1987";
case Charset::UTF16LE:
return "UTF-16LE";
case Charset::UTF16BE:
return "UCS-2BE";
case Charset::Cyrillic:
return "windows-1251";
case Charset::ISO2022JP2:
return "ISO-2022-JP-2";
default:
return "GB18030";
}
}
bool StringCodec::Open(Charset::Type to, Charset::Type from)
{
m_pHandle = (void*)::iconv_open(GetCharsetName(to).c_str(),GetCharsetName(from).c_str());
return false;
}
bool StringCodec::Open(const std::string& to, const std::string& from)
{
m_pHandle = (void*)::iconv_open(to.c_str(),from.c_str());
return false;
}
bool StringCodec::IsOpen()
{
return (m_pHandle != (void *)-1);
}
void StringCodec::Close()
{
(void*)::iconv_close(m_pHandle);
m_pHandle = (void *)-1;
}
bool StringCodec::Convert(std::string& target, const std::string& source)
{
if (!IsOpen())
{
return false;
}
size_t s_len = source.length();
const char *s_ptr = source.c_str();
size_t max_o_len = s_len * 5;
size_t o_len = max_o_len;
std::string strBuffer;
strBuffer.resize(max_o_len);
char *buff = const_cast<char *>(strBuffer.data());
size_t ret = ::iconv(m_pHandle,&s_ptr,&s_len,&buff,&o_len);
target.resize(0);
target.append(strBuffer.c_str());
return true;
}
没有合适的资源?快使用搜索试试~ 我知道了~
iconv字符编码转换的操作实例
共46个文件
pdb:8个
tlog:6个
lib:6个
需积分: 5 0 下载量 116 浏览量
2024-03-01
15:26:29
上传
评论
收藏 5.93MB ZIP 举报
温馨提示
通过iconv库函数,对中文编码进行转换
资源推荐
资源详情
资源评论
收起资源包目录
StringCode.zip (46个子文件)
iconv
win64
include
iconv.h 8KB
localcharset.h 2KB
libcharset.h 2KB
lib
charsetd.lib 2KB
charset.lib 2KB
iconv.lib 3KB
iconvd.lib 3KB
dll
charsetd.lib 2KB
iconvd.pdb 660KB
iconv.exe 24KB
iconvd.dll 1.17MB
charsetd.dll 53KB
charsetd.pdb 484KB
iconv.dll 897KB
iconvd.lib 3KB
vc140.pdb 116KB
StringCode
StringCode.VC.db 8MB
.vs
StringCode
v14
.suo 43KB
x64
Debug
iconvd.pdb 660KB
iconv.exe 24KB
iconvd.dll 1.17MB
StringCode.pdb 604KB
charsetd.dll 53KB
charsetd.pdb 484KB
StringCode.ilk 505KB
StringCode.exe 96KB
vc140.pdb 116KB
StringCode.sln 1KB
Debug
StringCode
StringCode.vcxproj 6KB
x64
Debug
Դ.obj 180KB
StringCode.log 209B
StringCode.obj 207KB
StringCode.tlog
CL.write.1.tlog 1KB
StringCode.lastbuildstate 210B
CL.command.1.tlog 3KB
link.command.1.tlog 3KB
link.read.1.tlog 4KB
link.write.1.tlog 1KB
CL.read.1.tlog 30KB
vc140.idb 467KB
vc140.pdb 412KB
StringCode.h 2KB
StringCode.cpp 3KB
StringCode.vcxproj.filters 1KB
Դ.cpp 362B
Debug
StringCode.tlog
StringCode.vcxproj.user 165B
共 46 条
- 1
资源评论
梦想患者
- 粉丝: 29
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功