UTF8与GBK、GB2312等其他字符编码的相互转换
utf8与其他字符编码的转换是国际化必然遇到的问题。
windows的api函数对:
WideCharToMultiByte和MultiByteToWideChar
个人喜欢的跨平台库:
单纯做字符编码转换的iconv
有准标准之称的boost中locale::conv。
示例代码:
iconv字符编码转换: bool gbk2utf8(const char* src, char* dest, size_t inlen)
{
const char* inbuf = src;
size_t outlen = inlen * ;
char* outbuf = dest;
memset(outbuf, , outlen);
iconv_t cd = iconv_open("UTF-8", "GBK");
size_t res = iconv(cd, &inbuf, &inlen, &outbuf, &outlen);
iconv_close(cd);
return ( == res) ? true : false;
}
boost字符编码转换 #include <boost/locale.hpp> boost::locale::conv::from_utf(utf8_text, "GB2312");
windows api的优缺点就不说了,谁用谁知道。
iconv是单独库,编译方便,使用稍显麻烦。
boost是个大库,编译稍显复杂,使用极其方便,除非目标平台不支持,一般建议使用。
至于boost和iconv的支持字符编码差异,暂未进行比较,有需要的请查看两者的文档。
UTF8与GBK、GB2312等其他字符编码的相互转换的更多相关文章
- 编码知识梳理(UTF-8, Unicode, GBK, X509, ANSI, VIM中编码)
编码小结 1 初识编码 所谓编码,是信息从一种形式或格式转换为另一种形式的过程. 字符编码,从自然语言的字符的一个集合(如字母表或音节表),到其他东西的一个集合(如号码或电脉冲)的映射 ANSI:wi ...
- Java 字符转码之UTF-8转为GBK/GB2312
java跟python类似的做法,在java中字符串的编码是java修改过的一种Unicode编码,所以看到java中的字符串,心理要默念这个东西是java修改过的一种Unicode编码的编码. pa ...
- 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...
- JAVA字符编码一:Unicode,GBK,GB2312,UTF-8概念基础
第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础 来源:holen'blog 对字符编码与Unicode,ISO 10646,UCS,UTF8,UTF16, ...
- 字符编码之间的转换 utf-8 , gbk等,(解决中文字符串乱码)
目录 1.背景. 2.编码的理解 3.编码之间的相互转化 4. str类型说明 5. 可以使用的编码类型 6.参考文章 1.背景 Python中与其他程序进行交互时,如果存在字符串交互,特别是字符串中 ...
- Unicode,GBK,GB2312,UTF-8概念基础(转载)
第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础本部分采用重用,转载一篇文章来完成这部分的目标.来源:holen'blog 对字符编码与Unicode,IS ...
- python成长之路【第五篇】:python字符编码
在2.7环境中我们要写上这一行#-*- coding:utf-8 -*- 为什么我们要加这一行呢?这一样的意思是置顶编码类型为utf-8编码! 首先在看这个问题之前,咱们是否曾想过一个问题? 为什么我 ...
- PHP字符编码问题-总结
今天在网上看到一个人的对于php开发中字符编码的总结,感觉不错,摘录如下: 一,php编码转换 1.通过iconv()函数实现编码转换 语法:iconv(s ...
- mysqli字符编码
mysqli 字符编码: 汉字编码: 1.gbk 最久的编码格式,不能写繁体: 2.国内的gb2312: 3.国际的标准:utf-8; 查看数据库的字符编码: show variables like ...
随机推荐
- 织梦dede编辑器ckeditor如何添加中文字体不乱码
dedecms内容编辑器ckeditor没有中文字体,找了很多教程都是千篇一律,而且都是错的,终于找到了一篇,结合自己的实际操作,来教您如何添加中文字体,并且解决乱码问题. 工具/原料 dedec ...
- RSA签名验签
import android.util.Base64; import java.security.KeyFactory; import java.security.PrivateKey; import ...
- "库未注册"(Library not registered)异常.
启发链接:http://social.msdn.microsoft.com/Forums/vstudio/en-US/f25b80bc-ecd4-4c37-8be3-9106a765b072/libr ...
- Oracle dblink 使用详解
1.dblink简介 dblink(Database Link)数据库链接就是数据库的链接,跨本地数据库 2.使用语法详解 基本语法 CREATE [SHARED][PUBLIC] database ...
- iOS定位问题解决方案
在需要用到定位服务时,需在info文件中加入: 1.NSLocationWhenInUseUsageDescription(类型为:string,值为:”我们需要通过您的地理位置信息获取您周边的相关数 ...
- 2016.7.13abstract
abstract的使用: 1.当许多类中有相同的功能,功能的内容不同,那么我们向上提取功能的定义. 2当功能的定义被 abstract修饰后,那么它的类也要被abstract修饰,使其抽象化. 3被a ...
- C# 线程间互相通信
C#线程间互相通信主要用到两个类:AutoResetEvent和ManualResetEvent. 一.AutoResetEvent AutoResetEvent 允许线程通过发信号互相通信,线程通过 ...
- Java学习----方法的覆盖
方法的覆盖:子类继承父类,子类重写父类的同名方法. 覆盖的原则: 1. 方法的参数必须跟父类保持一致 2. 子类方法的修饰符的范围必须大于等于父类方法同名的修饰符(public > privat ...
- Grunt:多个css,js,进行单独压缩
module.exports = function (grunt) { // 构建任务配置 grunt.initConfig({ //读取package.json的内容,形成个json数据 pkg: ...
- 如何自定义RecycleView item的间距
引言 在以前使用ListView和GridView时,设置item之间的间距还是相对比较简单的,因为它们的基本属性里面Android已经定义好了,可以直接设置属性值即可.但Google为了通用性和灵活 ...