标签: char32-t

Visual Studio C++ 2015 std :: codecvt with char16_t或char32_t

这段代码在VS2013下编译好了:

std::string Unicode::utf16_to_utf8(std::u16string utf16_string)
{
    std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
    return convert.to_bytes(utf16_string);
}
Run Code Online (Sandbox Code Playgroud)

现在使用VS2015我得到:

1>unicode.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static class std::locale::id std::codecvt<char16_t,char,struct _Mbstatet>::id" (__imp_?id@?$codecvt@_SDU_Mbstatet@@@std@@2V0locale@2@A)
Run Code Online (Sandbox Code Playgroud)

c++ stl char16-t char32-t visual-studio-2015

30
推荐指数
3
解决办法
7756
查看次数

C++ 0x中的新unicode字符

我正在建立一个允许我以各种编码方式获取字符串的API,包括utf8,utf16,utf32和wchar_t(根据操作系统可能是utf32或utf16).

  1. 新的C++标准已推出了新的类型char16_t,并char32_t没有这个的sizeof歧义,应在今后的使用,所以我想支持他们为好,但问题是,它们会干扰正常的uint16_t,uint32_t,wchar_t类型不允许超载,因为他们可以指同一类型?

    class some_class {
    public:
        void set(std::string); // utf8 string
        void set(std::wstring); // wchar string utf16 or utf32 according
                                 // to sizeof(wchar_t)
        void set(std::basic_string<uint16_t>)
                             // wchar independent utf16 string
        void set(std::basic_string<uint32_t>);
                             // wchar independent utf32 string
    
    #ifdef HAVE_NEW_UNICODE_CHARRECTERS
        void set(std::basic_string<char16_t>)
                             // new standard utf16 string
        void set(std::basic_string<char32_t>);
                             // new standard utf32 string
    #endif
    };
    
    Run Code Online (Sandbox Code Playgroud)

    所以我可以写:

    foo.set(U"Some utf32 String");
    foo.set(u"Some utf16 string");
    
    Run Code Online (Sandbox Code Playgroud)
  2. 什么是typedef的std::basic_string<char16_t>std::basic_string<char32_t>今天有:

    typedef …
    Run Code Online (Sandbox Code Playgroud)

c++ unicode c++11 char16-t char32-t

25
推荐指数
1
解决办法
5743
查看次数

在I/O中使用char16_t和char32_t

C++ 11引入char16_tchar32_t便于使用UTF-16和UTF-32编码的文本字符串.但是该<iostream>库仍然只支持wchar_t为多字节I/O 定义的实现.

为什么支持char16_tchar32_t未添加到<iostream>库中以补充wchar_t支持?

c++ iostream c++11 char16-t char32-t

21
推荐指数
1
解决办法
8540
查看次数

C++ char16_t的大小取决于什么?

这也char32_t和任何有关intXX_t.规范指出:

2.14.3.2:

包含单个c-char的char16_t文字的值等于其ISO 10646代码点值,前提是代码点可用单个16位代码单元表示.

5.3.3.1:

[..]特别是[...] sizeof(char16_t),sizeof(char32_t)和sizeof(wchar_t)是实现定义的

intXX_t除了评论它们是"可选的"(18.4.1)之外,我看不出有关类型的任何信息.

如果不char16_t保证是2个字节,那么它是否保证是16位(即使在1个字节的架构上!= 8位)?

c++ c++11 char16-t char32-t

12
推荐指数
2
解决办法
1739
查看次数

char16_t和char32_t endianness

在C11,对于便携式宽字符类型的支持char16_tchar32_t加入分别为UTF-16和UTF-32.

但是,在技术报告中,没有提到这两种类型的字节顺序.

例如,使用以下代码gcc-4.8.4编译时,我的x86_64计算机上的以下代码段-std=c11:

#include <stdio.h>
#include <uchar.h>

char16_t utf16_str[] = u"??";  // U+5341 U+516D
unsigned char *chars = (unsigned char *) utf16_str;
printf("Bytes: %X %X %X %X\n", chars[0], chars[1], chars[2], chars[3]);
Run Code Online (Sandbox Code Playgroud)

会产生

Bytes: 41 53 6D 51
Run Code Online (Sandbox Code Playgroud)

这意味着它是小端的.

但这种行为平台/实现是否依赖:它是否始终遵循平台的字节序,或者某些实现是否可以选择始终实现char16_tchar32_t使用big-endian

c endianness c11 char16-t char32-t

2
推荐指数
1
解决办法
1321
查看次数

标签 统计

char16-t ×5

char32-t ×5

c++ ×4

c++11 ×3

c ×1

c11 ×1

endianness ×1

iostream ×1

stl ×1

unicode ×1

visual-studio-2015 ×1