C++:中文编码转换 您所在的位置:网站首页 utf8翻译器 C++:中文编码转换

C++:中文编码转换

2023-09-26 17:40| 来源: 网络整理| 查看: 265

在介绍如何使用C++11标准库进行中文编码转换之前,先说一下byte string、multibyte string、wide string之间的区别。

byte string

由8比特的字节组成的字符串。由char表示字节。因而字符串长度=字节数=char数

multibyte string

在内存布局上与byte string相同。但是由于它是区域(locale)相关的,所以它有可能表示的是UTF-8, GB18030, EUC-JP, Shift-JIS等格式的字符串,而这些格式中的每个字码(codepoint)可能是由多个连续的char组合构成的,所以字符串长度=字码数,但!=char数,也!=字节数。

 wide string

每个宽字符由于操作系统的不同,其宽度为16位或32位的多语言字符代码。格式分别采用unicode(UTF-16LE)、UTF-16、UTF-32,由wchar_t, char16_t, char32_t表示。

C++标准库中对应关系:

char *        std::string wchar_t*   std::wstring char16_t*  std::u16string char32_t*  std::u32string

1.string与wstring互相转化

C++标准库从C++11开始提供了std::codecvt_utf8和std::codecvt_byname两个转换器来完成编码转换,可使用的通用代码如下:

#include #include #include // string的编码方式为utf8,则采用: std::string wstring2utf8string(const std::wstring& str) {     static std::wstring_convert strCnv;     return strCnv.to_bytes(str); } std::wstring utf8string2wstring(const std::string& str) {     static std::wstring_convert< std::codecvt_utf8 > strCnv;     return strCnv.from_bytes(str); } // string的编码方式为除utf8外的其它编码方式,可采用: std::string wstring2string(const std::wstring& str, const std::string& locale) {     typedef std::codecvt_byname F;     static std::wstring_convert strCnv(new F(locale));     return strCnv.to_bytes(str); } std::wstring string2wstring(const std::string& str, const std::string& locale) {     typedef std::codecvt_byname F;     static std::wstring_convert strCnv(new F(locale));     return strCnv.from_bytes(str); }

如果是GBK string与wstring互相转化,locale可取值:

linux下:

zh_CN.GBK zh_CN.GB2312 zh_CN.GB18030

windows下:

标准格式的locale: Chinese_China.936 zh-CN .936非标准格式的locale: chs Chinese-simplified Chinese ZHI不能使用的locale:  Chinese.936,chs.936,Chinese.GB2312,chs.GB18030等此类值。

下面通过一些例子说明上面的函数如何使用吧。

2.string与wstring如何输出到控制台

代码页为936

以在windows控制台为例,举例说明:

// testCode.cpp #include #include #include #include #include int main() { std::wstring txt = L"中国人"; std::wcout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有