c语言utf8转gbk,c gbk转utf8

dfnjsfkhak 1 0

大家好,今天小编关注到一个比较有的话题,就是关于c语言utf8转gbk的问题,于是小编就整理了2个相关介绍c语言utf8转gbk的解答,让我们一起看看吧。

  1. scala中怎么把字符的编码方式从gbk转换成utf8?
  2. char类型怎么转换为string?

scala中怎么字符编码方式从gbk转换成utf8?

1. ***设你使用了Apache的Commons-io包 Commons IO -

Commons IO Overview,可以使用如下代码

c语言utf8转gbk,c gbk转utf8-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

import java.io.File

import org.apache***mons.io.FileUtils

val file = new File(filename)

c语言utf8转gbk,c gbk转utf8-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

content = FileUtils.readFileTostring(file, "gbk")

FileUtils.write(file, content, "UTF-8")

2. 如果你用的是JAVA7:

c语言utf8转gbk,c gbk转utf8-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

import j***a.nio.file.{Paths, Files}

val content = io.Source.fromFile(filename, "gbk").mkString

char类型怎么转换为string?

C++11的std::wstring_convert配合std::codecvt模板类完全可以解决这个问题,不会出现

@vczh

所说修改全局locale会导致污染其他库的问题。

两个模板类的功能是:

std::wstring_convert:转码器,接收一个类似codecvt描述编码转换特性的模板参数用于本地化的宽字符wstring和指定编码的字节化string进行互转。


std::codecvt:编码转换特性类,用在wstring_convert的模板参数中来指定使用哪种编码。



所以编码A和B互转的实现方式就是:借助本地化宽字符串,先将以A编码的string转为本地化的wstring,再将本地化的wstring转为B编码后的string。

codecvt一般使用下面两个特化子类
std::codecvt_utf8<wchar_t>:用于UTF8和本地化wchar_t的互转
std::codecvt_byname<wchat_t, char, std::mbstate_t>:用于其他编码(例如GBK)和本地化wchar_t的互转,类的构造函数需要传入编码的locale name,

由于编码的locale name是操作系统决定的(例如GBK在linux下的locale名可能是"zh_CN.GBK",而windows下是".936"),因此做跨平台的话仍然要给的系统做适配。

这里给一个windows下,GBK string转UTF8 string的例子:首先将GBK string转wstring

再将wstring转为UTF8 string转码就完成了。utf8_str里的内容应该是"\xE7\x83\xAB"(烫的UTF8)。

到此,以上就是小编对于c语言utf8转gbk的问题就介绍到这了,希望介绍关于c语言utf8转gbk的2点解答对大家有用

标签: 编码 本地化 string