`
zuroc
  • 浏览: 1302350 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

Boost:UTF-8 Codecvt Facet(unicode 和 utf-8 之间相互转码)

    博客分类:
  • C++
阅读更多

看到有前辈写了一个UTF-8与UNICODE相互转换的代码,顺便提一下,希望可以给大家提供一点帮助.
下面是一些编码格式的bit长

Examples of fixed-width encoding forms:

Type Each character
encoded as Notes
  7-bit a single 7-bit quantity example: ISO 646
  8-bit G0/G1 a single 8-bit quantity with constraints on use of C0 and C1 spaces
  8-bit a single 8-bit quantity with no constraints on use of C1 space
  8-bit EBCDIC a single 8-bit quantity with the EBCDIC conventions rather than ASCII conventions
16-bit (UCS-2) a single 16-bit quantity within a code space of 0..FFFF
32-bit (UCS-4) a single 32-bit quantity within a code space 0..7FFFFFFF
32-bit (UTF-32) a single 32-bit quantity within a code space of 0..10FFFF
16-bit DBCS process code a single 16-bit quantity example: UNIX widechar implementations of Asian CCS's
32-bit DBCS process code a single 32-bit quantity example: UNIX widechar implementations of Asian CCS's
DBCS Host two 8-bit quantities following IBM host conventions

Examples of variable-width encoding forms:

Name Characters are encoded as Notes
UTF-8 a mix of one to four 8-bit code units in Unicode
and one to six code units in 10646
used only with Unicode/10646
UTF-16 a mix of one to two 16 bit code units used only with Unicode/10646

Boost中提供了一个UTF-8 Codecvt Facet,可以在utf8和UCS-4(Unicode-32)之间转换.
使用方式如下

  //...
  // My encoding type
  typedef wchar_t ucs4_t;

  std::locale old_locale;
  std::locale utf8_locale(old_locale,new utf8_codecvt_facet<ucs4_t>);

  // Set a New global locale
  std::locale::global(utf8_locale);

  //  UCS-4 转换为 UTF-8
  {
    std::wofstream ofs("data.ucd");
    ofs.imbue(utf8_locale);
    std::copy(ucs4_data.begin(),ucs4_data.end(),
          std::ostream_iterator</ucs4_t>

 
分享到:
评论

相关推荐

    c++ UTF-8 UTF-16转换

    在编程领域,尤其是在涉及到字符编码的时候,理解和操作UTF-8和UTF-16之间的转换是一项基本技能。UTF-8和UTF-16是两种广泛使用的Unicode编码格式,它们各自有其特性和应用场景。本文将深入探讨如何利用C++来实现这两...

    C++ UTF-8与 Unicode互相转换.docx

    UTF-8和Unicode是两种广泛使用的字符编码标准,它们各自有其特点和应用场景。本文将详细探讨C++中如何进行UTF-8与Unicode之间的转换,以及涉及的相关知识。 首先,我们要了解UTF-8和Unicode的基本概念。Unicode是一...

    c++ utf-8转gbk

    `codecvt_utf8_gbk`是一个特定的`codecvt`类,用于UTF-8和GBK之间的转换。不过需要注意的是,C++11标准之后,`codecvt`类在某些编译器中被标记为过时,因此在现代C++代码中可能会需要寻找替代方案,例如使用第三方库...

    实现ascii ,utf8,utf16三种编码之间的转换.zip

    ASCII、UTF-8和UTF-16是三种常见的字符编码标准,每种都有其独特的特性和用途。本篇文章将深入探讨这三种编码方式,并解释如何在它们之间进行转换。 **ASCII编码**(American Standard Code for Information ...

    字符编码转换,utf16 utf8 ascii unicode

    本文将深入探讨四个关键的字符编码标准:UTF-16、UTF-8、ASCII和Unicode,以及它们之间的转换方法。 首先,Unicode是一个字符集,包含了世界上几乎所有的文字系统,为每个字符分配了一个唯一的数字,称为码点。它...

    cocos2dx中文ansi转utf-8的接口代码

    UTF-8则是Unicode的一种实现方式,能支持全球大部分语言,包括繁体中文、日文、韩文等。 在Cocos2d-x中,我们通常使用C++进行编程,C++标准库并不直接支持字符串编码转换,但我们可以利用第三方库或者自定义函数来...

    创建UTF8 文件

    C++编程语言虽然最初设计时并未内置对Unicode(包括UTF-8)的直接支持,但通过一些库和技巧,我们可以方便地创建和操作UTF-8编码的文件。以下是对“创建UTF8文件”这一主题的详细解释。 1. **UTF-8编码**:UTF-8是...

    gbk和utf8转换程序

    这些程序可以帮助开发者理解如何在C++中实现GBK和UTF-8之间的转换,同时展示了C++11新特性在实际编码问题中的应用。 总的来说,理解和掌握GBK与UTF-8的差异以及它们之间的转换方法是编程中的一项基本技能,特别是在...

    UTF8.rar_UTF8_linux utf8 _linux utf8 Unicode_single

    在Linux环境中,处理字符编码通常涉及到标准库函数,比如`std::wstring_convert`和`std::codecvt_utf8`,这些可以用来在UTF-8和其他编码之间进行转换。然而,由于“single”这一标签,代码可能会使用更低级别的方法...

    msvcp140-codecvt-ids.dll

    不同的系统和环境可能使用不同的字符编码标准,如ASCII、Unicode(包括UTF-8、UTF-16等变体)和GBK等。`codecvt_ids`是C++标准库中一个与编码转换相关的类,它用于管理不同编码之间的映射关系,帮助程序在读写文件或...

    unicode_utf8.rar_UTF8

    本文将深入探讨UTF-8编码,以及与Unicode的关系,基于提供的"unicode_utf8.rar_UTF8"压缩包文件,我们可以推测这是一份实现UTF-8到Unicode转换的C++源代码。 **1. Unicode编码** Unicode是一种国际标准,旨在为世界...

    VC ASCII,UNICODE,UTF8字符串互相转换的C++代码

    1. ASCII到UTF-8: ```cpp #include #include &lt;codecvt&gt; #include std::string ascii_to_utf8(const std::string& ascii_str) { std::wstring_convert&lt;std::codecvt_utf8, char&gt; converter; return converter....

    [NTDLL][Rtl系列]UNICODE互转UTF8

    总的来说,理解和熟练运用Unicode与UTF-8的转换对于Windows开发人员来说是至关重要的,特别是当他们的应用需要处理来自不同来源的文本数据时。正确地进行这种转换能够确保数据在不同系统和平台之间的兼容性。

    替换文件字符串 utf8 unicode ansi

    2. **UTF-8**:UTF-8 是 Unicode 的一种变体,它是一种可变长度的编码方式,广泛用于网络和计算机存储。在 UTF-8 编码中,英文字符通常用单字节表示,而其他语言如中文、日文等则可能需要多个字节。UTF-8 的优点在于...

    GB、UNICODE、UTF8相互转换

    GB2312、UNICODE和UTF-8各自有其适用的场景,而转换技术则帮助我们在不同编码系统之间架起桥梁,确保数据的正确性和一致性。在实际项目中,开发者应根据需求选择合适的编码方式,并熟悉相应的转换机制,以应对各种...

    utfcpp:具有可移植方式的C ++的UTF-8

    C ++ 11在核心语言和库级别上提供了对Unicode的一些支持:u8,u和U字符和字符串文字,char16_t和char32_t字符类型,u16string和u32string库类,以及codecvt支持在Unicode编码形式之间进行转换。 同时,开发人员使用...

    win32环境下cocos2d-x转码显示中文

    常见的字符编码有ASCII、GB2312、GBK、Big5和UTF-8等。在Windows系统中,ansi编码(如GBK)通常用于中文,而Cocos2d-x项目中可能采用UTF-8编码。当两种编码不匹配时,就会出现乱码现象。 1. **配置项目编码**:确保...

    untitled1.zip

    1. **字符串转换**:使用`std::wstring_convert`和`std::codecvt_utf8_utf16`将UTF-8字符串转换为UTF-16。注意,C++17之后,`std::wstring_convert`已被弃用,可以使用其他库如`boost::locale`来完成转换。 ```cpp ...

    Unicode CString和 std::string 的完美转换,不会有64K限制

    这个函数首先获取Unicode CString的长度,然后利用`std::wstring_convert`进行UTF-16到UTF-8的转换。 `StdStringToUnicode`函数可能的实现是: ```cpp CString StdStringToUnicode(const std::string& asciiOrUtf8...

    jsoncpp 1.8.4 中文值乱码问题指南

    JSONCPP 作为遵循这一标准的库,期望接收和返回的 JSON 字符串都是 UTF-8 编码的。然而,在实际应用中,数据可能来源于其他编码格式,如 GBK 或 GB2312,这就可能导致乱码。 1. **确保输入数据是 UTF-8 编码**:在...

Global site tag (gtag.js) - Google Analytics