C 中的 UTF8 处理

2024-04-24

我对UTF8有基本的了解:码点的长度是可变的,所以一个“字符”可以是8位、16位,甚至更长。

我想知道 C 语言中是否有一些示例代码、库等可以与 UTF8 字符串(如 C 中的标准库)执行类似的操作。告诉字符串的长度等。

Thanks,


GNU 有一个 Unicode 字符串库,称为库尼字符串 http://www.gnu.org/software/libunistring/manual/,但它处理任何事情的效果都不如ICU http://site.icu-project.org/是的。

例如,GNU 库甚至不允许您访问排序规则,这是所有字符串比较的基础。相比之下,ICU 却是这样。 ICU 拥有但 GNU 没有出现的另一件事是 Unicode 正则表达式。为此,您可能想使用Phil Hazel 出色的 C 语言 PCRE 库 http://www.pcre.org,可以使用 UTF-8 支持进行编译。

然而,GNU 库可能足以满足您的需要。我不太喜欢它的 API。很乱。如果你喜欢C语言编程,你可以尝试Go编程语言 http://golang.org,它具有出色的 Unicode 支持。这是一门新语言,但小巧、干净且使用起来很有趣。

另一方面,主要的解释语言——Perl、Python 和 Ruby——都对 Unicode 有不同的支持,这比 C 语言中的支持要好。其中,Perl 的 Unicode 支持是最成熟和最强大的。

请记住:仅支持更多字符是不够的。如果没有相应的规则,就没有 Unicode。最多,您可能拥有 ISO 10646:大量字符库,但没有规则。我的座右铭是“Unicode 不仅仅是更多的字符;而是更多的字符”。更多的角色plus一整套处理它们的规则。”

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

C 中的 UTF8 处理 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • 如何在 Android 上的 HttpPost 中发送 unicode 字符

    我试图在我的应用程序中允许多语言支持 这会发出 HTTP post 来上传新消息 我需要做什么才能支持日语和其他非拉丁语语言 我的代码目前看起来像这样 note the msg string is a JSON message by the
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 如何在Vim中正确显示UTF-8字符

    我想要 需要编辑包含 UTF 8 字符的文件 并且我想使用 Vim 在我被指责问以前问过的问题之前 我已经阅读了有关编码 文件编码 s 术语编码等的 Vim 文档 用 google 搜索了该主题 并阅读这个问题 https stackove
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 无法使用 Spring 的 WebServiceTemplate 将 Http 标头添加到消息中

    我有一个相当简单的情况 我尝试将 HTTP 标头 不是 SOAP 标头 添加到我使用 Spring 发出的请求中WebServiceTemplate 我定义了一个ClientInterceptor我在哪里做 Override public
  • Numpy 中如何获得向量的大小?

    为了与 只有一种明显的方法可以做到这一点 保持一致 如何在 Numpy 中获取向量 一维数组 的大小 def mag x return math sqrt sum i 2 for i in x 上面的方法有效 但是我无法相信我必须自己指定这
  • Android JNI异常处理

    我需要在 JNI 代码中实现异常处理 我不擅长 jni 找不到任何好的例子 因此 请提供完整的示例 这就是我正在做的 jint JNI OnLoad JavaVM vm void reserved jint result 1 g JavaV
  • 为什么 nhibernate 3.3 不允许 ICollection 上的私有 setter?

    我从 nhibernate 3 2 升级到 nhibernate 3 3 并且在我的域类中定义了很多虚拟成员 如下所示 public virtual ICollection
  • Django Channels - 无法在断开连接时发送消息

    我希望能够在用户断开连接时向房间组发送消息 以便更新玩家列表 似乎一旦断开连接就不可能了 这在某种程度上是有意义的 但是在断开用户连接之前我如何能够向通道发送消息 我有以下代码 async def disconnect self close
  • 不太无用的“yes”bash 命令:如何在每个循环中确认命令

    我编写了一个循环来解压缩目录中的所有 zip 文件 for f in zip do unzip f done 但是 我必须在每一步确认覆盖 replace file123 txt y es n o A ll N one r ename A
  • Functions Bot 是否不再是 Azure 中推荐的机器人服务?

    我有一个无服务器系统 我希望向其中添加 Bot Framework 主要是为了提供与不同聊天渠道的集成 我正在考虑尝试在 Bot Service 中创建一个 Functions Bot 但是当我开始创建一个时 我收到以下信息消息 Funct
  • adArray 的 VBScript / ADODB 语法问题?

    我希望有人能给我一些关于我的 vb 脚本的新视角 该脚本的主要目的是使用一些参数执行存储过程 我得到的错误是 预计声明结束 我没有做过太多的 VB 脚本编写 但从目前为止我发现的情况来看 这个错误是由于某种语法问题造成的 我已经查看这个脚本
  • 如何在asp.net mvc中从https跳出到http模式

    我通过在控制器操作上添加属性 RequireSSL 使我的登录页面启用了 Https 并且工作正常 但登录成功后仍处于https环境 但页面为非https页面 谁能给我解决如何从 https 模式退出到 http 模式的问题吗 在这方面的任
  • Django django-location-field 缺少 API 密钥

    我正在使用https github com caioariede django location field https github com caioariede django location field使用 Django 构建位置视图
  • 结合阴影误差和实线平均值的图例

    我在用此 FEX 条目 http www mathworks com matlabcentral fileexchange 27485 boundedline line plots with shaded errorconfidence i
  • 如何避免c#中windows窗体的多个实例

    如何避免在 C 中出现多个 Windows 窗体实例 我只想运行该表单的一个实例 因为有机会从我的申请的许多页面打开相同的表格 是的 它有单例模式 创建单例对象的代码 public partial class Form2 Form priv
  • 如何使用 javafx 隐藏或停用 TextField 和 Label

    我想隐藏或停用TextField和它的Label在我的 JavaFX 应用程序中 这就是我尝试过的 myTextField setVisible false 但它不起作用 我在 Windows 7 上使用 Eclipse V4 5 0 和
  • 基于字符串创建ViewBag属性

    有没有办法基于字符串创建和使用 ViewBag 的动态属性 就像是 ViewBag CreateProperty MyProperty ViewBag Property MyProperty Myvalue 谢谢 我刚刚发现 ViewDat
  • 使用表达式时ggplot右对齐轴文本

    我正在制作一个带有长轴标签的条形图 我需要将其换行并右对齐 唯一的复杂之处是我需要添加一个表达式来具有上标 library ggplot2 library scales df lt data frame levs c a long labe
  • 在 Mac OS X 10.6.3 下保存 PDF 时应用 Quartz 滤镜

    使用 Mac OS X API 我尝试保存应用了 Quartz 过滤器的 PDF 文件 就像在预览应用程序中的 另存为 对话框中一样 到目前为止 我已经编写了以下代码 使用Python和pyObjC 但这对我来说并不重要 filter pd
  • 使用 amplify ui React 配置状态时,AuthStatus 不会发生变化

    我正在使用 AWS amplify UI React 在 React 应用程序中创建身份验证流程 我按照该文档并使用下面的文档制作了导航流程 https ui docs amplify aws react guides auth prote
  • 没有合适的用户定义转换

    我正在尝试编写一个包装数值的 C 程序 我通过编写一个超类来做到这一点 它将处理两个简单函数和一个运算符重载函数 这是我的代码 include
  • .NET 4 中的 TaskCreationOptions.DenyChildAttach

    我在 NET 4 5 中看到Task Run 相当于 Task Factory StartNew someAction CancellationToken None TaskCreationOptions DenyChildAttach T
  • C 中的 UTF8 处理

    我对UTF8有基本的了解 码点的长度是可变的 所以一个 字符 可以是8位 16位 甚至更长 我想知道 C 语言中是否有一些示例代码 库等可以与 UTF8 字符串 如 C 中的标准库 执行类似的操作 告诉字符串的长度等 Thanks GNU