当前位置: 首页 > 知识库问答 >
问题:

Unicode代码指向字节和反向:在C++中如何做到这一点?

傅星光
2023-03-14

现在,让我们假设C++11。它介绍了std::u32stringstd::u16string;据我所知,它们是std::basic_string std::basic_string 的“别名”,其净效果是,在运行时,您声明的字符串常量(使用u“u”)由分别表示UTF-16或UTF-32代码单元的16bit或32bit实体组成。还有u8“”(后者的basic_string类型是什么,因为它没有固定长度?)。

其他重要的一点:UTF-16有两个变体,即LE和BE;java确实是,因为在字节码级别,一切都是。char{16,32}_t是否依赖于代码中的endianness?

但是,即使经过几个小时的搜索,我也找不到答案:作为标准C++11是否可以做标准JDK所做的事情,即在给定字符编码的情况下,将任何字符串常量转换成合适的字节序列,反过来转换?我怀疑这会变得更加困难,因为在运行时,一个字符串文本基本上有三种表示形式,甚至不需要执行char*,这基本上是一个字节数组...

(编辑:添加了指向相关javadoc的链接)

共有1个答案

夏侯楷
2023-03-14

您可以通过使用codecvt区域设置方面进行转换。

用法有点不直观,但我就是这么做的:

/** Convert utf8 stream to UCS-4 stream */
u32string decode(string utf8)
{
    std::wstring_convert<std::codecvt_utf8<char32_t>,char32_t> convert;
    return convert.from_bytes(utf8);
}

/** Convert UCS-4 stream to utf8 stream */
string encode(u32string ucs4)
{
    std::wstring_convert<std::codecvt_utf8<char32_t>,char32_t> convert;
    return convert.to_bytes(ucs4);
}

虽然它需要一个不错的编译器,但对我来说,gcc只能正确工作,gcc编译但生成无效的结果(更新版本的gcc可能可以)。

 类似资料:
  • 问题内容: 让我们假设我们要还原以下字符串“áe”。 该代码为“ \ u0061 \ u0301 \ u0065”。 恢复它的幼稚方法是逐个字符 当我们希望获得“eá”(\ u0065 \ u0061 \ u0301)时,它会给我们“éa”(\ u0065 \ u0301 \ u0061)。重音“´”应与“ a”粘贴在一起,而不要更改为“ e”。 以下代码为我提供了该字符串的预期结果: 我正在检查

  • Nginx的配置文件如下: server { listen 80; #此处应该配置你的域名: server_name doc.iminho.me; charset utf-8; #此处配置你的访问日志,请手动创建该目录: access_log /var/log/nginx/webhook.iminho.me/access.log

  • 我有一个关于TestFX4的问题。有一个GUI对象,我想在其中将文本设置为TextField(“#SearchField”)。 它在TestFX3中的工作方式如下:

  • 问题内容: 我试图或多或少地使用Java API 重新创建此示例。 我认为我所需要的只是向索引添加映射,但是Java API文档尚不清楚如何执行此操作。 请告诉我如何用Java创建映射,该映射与文档中的示例等效: 这是我的代码: 问题答案: 终于,经过一天的谷歌搜索获得了回报。坦率地说,用于Elasticsearch的Java API文档可以使用一些端到端示例,更不用说JavaDoc … 这是一个

  • 我试图使用nginx作为双向SSL/相互SSL的web逻辑的反向代理。 客户端<=双向SSL=>NGINX<=双向SSL=>WebLogic服务器 客户端到NGINX双向SSL工作良好,但在上游连接到web逻辑上出现以下错误。 nginx调试日志: 以下是我对上游的nginx配置: 我尝试了各种选项,包括注释下面的配置。 如果我尝试使用openssl c_client命令行,我能够连接并获得HTT

  • 什么是反向代理 反向代理(Reverse Proxy)方式是指用代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 举个例子,一个用户访问 http://www.example.com/readme,但是 www.example.com 上并不存在