处理 UTF-8 字符串

2023-11-27

据我所知linux使用UTF-8编码。 这意味着我可以使用std::string用于处理字符串吗? 只是编码是 UTF-8。

现在在 UTF-8 上我们知道有些字符是 1 个字节,有些是 2,3.. 字节。 我的问题是:如何使用 C++ 在 Linux 上处理 UTF-8 编码的字符串?

特别是:如何获得字符串的长度(以字节为单位(或字符数))?你将如何遍历字符串? ETC。

我问的原因是,正如我所说,UTF-8 字符可能不止一个字节,对吗? 很明显myString[7] and myString[8]- 可能不指两个不同的字符。 另外,UTF-8 字符串有 10 个字节,这并没有说明它的字符数,对吗?


您无法处理 UTF-8std::string. string尽管它的名字如此,它只是一个(多)字节的容器。这是not用于文本存储的类型(字节缓冲区显然可以存储任何对象,包括文本)。它甚至不存储字符(char是一个字节,而不是一个字符)。

如果你想真正做到这一点,你需要在标准库之外冒险handle(而不仅仅是存储)Unicode 字符。传统上,这是由诸如ICU.

然而,虽然这是一个成熟的库,但它的 C++ 接口很糟糕。采用现代方法Ogonek。它尚未完善并且仍在进行中,但提供了much更好的界面。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理 UTF-8 字符串 的相关文章

随机推荐

  • 如何为谷歌MapView制作具有视差滚动效果的自定义CoordinatorLayout.Behavior?

    我尝试为谷歌制作视差滚动效果MapView and RecycleView using CoordinatorLayour 因此 根据在网上找到的一些教程 我编写了以下代码 布局
  • 如何在 github 主页中删除“您贡献的存储库”

    我已向存储库提交了一个新问题 之后 我的 github 主页中始终会出现一个通知选项卡 我只是不想删除这个烦人的存储库 但我无法弄清楚 你有没有尝试过https docs github com en github setting up an
  • 如何猴子修补`__call__`方法?

    我似乎无法猴子修补 call 类实例的方法 是的 我只想修补单个实例 而不是全部 以下代码 class A object def test self return TEST def call self return EXAMPLE a A
  • dataAdapter .Fill 和 .Update 的比较

    我已经阅读了 MSDN 资源和几个论坛 但仍然不明白这两者之间有什么区别dataAdapter Fill and dataAdapter Update 我尝试使用它们从我的程序中更新数据库并且它有效 但是当我尝试删除update 功能 它仍
  • Zend 和 .htaccess

    我的默认 zend 应用程序具有此默认结构 zend webroot application config library public htaccess index php 默认 htaccess 通过 public index php
  • Android上不确定水平进度条的样式

    确定进度条的样式很容易 有很多教程可以实现这一点 这是我正在使用的
  • 通过 Google App Engine 的 Google Drive API

    我正在尝试通过以下方式使用 Google Drive API应用程序身份Google App Engine 提供的界面 这基本上允许我的网络应用程序与 Google 的 API 进行通信从服务器到服务器 我不需要我的用户登录 我只需要显示我
  • MapReduce 的随机播放和排序

    我通读了权威指南和网络上的其他一些链接 包括here 我的问题是 洗牌和排序到底发生在哪里 根据我的理解 它们发生在映射器和减速器上 但一些链接提到改组发生在映射器上 排序发生在减速器上 有人可以确认我的理解是否正确吗 如果没有 他们可以提
  • Android 应用程序中的 ExceptionInInitializerError?

    在我的 Android 应用程序中 WebView 活动类具有以下行 webView addJavascriptInterface new JSInterface this Android 在 JSInterface 类中 我正在初始化 G
  • 视图以模态视图动画显示,而不是显示(推送)动画

    我最近将我的应用程序从 iOS 8 3 更新到了 iOS 9 在修复了代码的各种错误后 当我注意到以下问题时 我设法编译应用程序并运行它 当我执行segue单击时 例如 UIButton 加载了segue的视图会出现模态视图的动画 从底部滑
  • C 语言中的 deflate 和 inflate (zlib.h)

    我正在尝试实现 zlib h deflate 和 inflate 函数来压缩和解压缩 char 数组 而不是文件 我想知道以下语法是否正确 我是否遗漏了某些内容或错误地定义了某些内容 char a 50 Hello World char b
  • NPM版本中如何表示内部版本号?

    我想在 package json 中将内部版本号附加到我的项目 我正在寻找最好的方法来做到这一点 我发现如果前面有 node semver 会将字符串识别为内部版本号 例如 这将是构建 123 1 0 0 123 但是 NPM 版本模块也接
  • 通过属性值选择元素的 XPath

    我有以下 XML
  • 将 MuPDF 集成为库项目 (Android)

    所以我基于pdf阅读器 MuPDF 构建了这个项目 我为此使用了 ndk build 该项目的名称是 ChoosePDFActivity 我知道它已正确构建 因为我可以在我的内部看到一个 so 文件libs armrabi v7a THIS
  • 无需分片的高并发计数器

    这个问题涉及计数器的两种实现 它们旨在在不进行分片的情况下进行扩展 在某些情况下它们可能会低估计数 http appengine cookbook appspot com recipe high concurrency counters w
  • 更改ggplot2中geom_bar的图例键的形状

    我正在尝试更改 geom bar 图中图例键的形状 我在网上查看了多个答案 但发现它们在这种情况下不起作用 让我解释一下这个问题 df1 data frame person c person1 person2 person3 variabl
  • 声明性表上的 SQLAlchemy 多对多关系

    我以声明方式定义了下表 非常简化的版本 class Profile Base tablename profile id Column Integer primary key True name Column String 65 nullab
  • Selenium WebDriver 获取边框颜色

    大家好 我正在尝试使用 getCssValue 方法获取 extjs 4 2 表单控件文本字段的边框颜色 但我无法获取它 它让我返回空白 下面是我的代码片段 你可以按原样尝试 import org openqa selenium By im
  • Git Diff 缩进/漂亮打印/美化 Diff 之前

    有没有办法让Gitindent beautify pretty 在比较 C 源文件的两个版本之前打印它们 我不希望 Git 向我展示在某人自动格式化代码后引入的无数更改 用法示例 我击中git difftool indent before
  • 处理 UTF-8 字符串

    据我所知linux使用UTF 8编码 这意味着我可以使用std string用于处理字符串吗 只是编码是 UTF 8 现在在 UTF 8 上我们知道有些字符是 1 个字节 有些是 2 3 字节 我的问题是 如何使用 C 在 Linux 上处