将 Unicode 代码点转换为 UTF-8 和 UTF-32

2023-12-06

我想不出一种方法来删除前导零。我的目标是for循环创建每个数字的 UTF-8 和 UTF-32 版本。

例如,对于 UTF-8,我不需要删除前导零吗?有谁有解决方案来解决这个问题?基本上我要问的是:有人有一个简单的解决方案将 Unicode 代码点转换为 UTF-8 吗?

    for (i = 0x0; i < 0xffff; i++) {
        printf("%#x \n", i);
        //convert to UTF8
    }

所以这是我试图为每个人完成的一个例子i.

  • For example: Unicode value U+0760 (Base 16) would convert to UTF8 as
    • 二进制:1101 1101 1010 0000
    • 十六进制:DD A0

基本上我正在尝试为每个人做到这一点i将其转换为 UTF-8 中的十六进制等效值。

我遇到的问题是,将 Unicode 转换为 UTF-8 的过程似乎涉及从位数中删除前导 0。我不太确定如何动态地做到这一点。


正如维基百科UTF-8页描述,每个 Unicode 代码点(0 到 0x10FFFF)都以 UTF-8 字符编码为一到四个字节。

这是一个简单的示例函数,是根据我之前的一篇文章编辑的。我现在已经删除了U也来自整数常量的后缀。 (..其目的是提醒人类程序员,由于某种原因,常量显式无符号(根本不考虑负代码点),并且它确实假设 unsigned intcode-- 编译器不在乎,可能是因为这种做法即使对于这里的长期成员来说也显得奇怪和令人困惑,所以我放弃并停止尝试包含这样的提醒。 :( )

static size_t code_to_utf8(unsigned char *const buffer, const unsigned int code)
{
    if (code <= 0x7F) {
        buffer[0] = code;
        return 1;
    }
    if (code <= 0x7FF) {
        buffer[0] = 0xC0 | (code >> 6);            /* 110xxxxx */
        buffer[1] = 0x80 | (code & 0x3F);          /* 10xxxxxx */
        return 2;
    }
    if (code <= 0xFFFF) {
        buffer[0] = 0xE0 | (code >> 12);           /* 1110xxxx */
        buffer[1] = 0x80 | ((code >> 6) & 0x3F);   /* 10xxxxxx */
        buffer[2] = 0x80 | (code & 0x3F);          /* 10xxxxxx */
        return 3;
    }
    if (code <= 0x10FFFF) {
        buffer[0] = 0xF0 | (code >> 18);           /* 11110xxx */
        buffer[1] = 0x80 | ((code >> 12) & 0x3F);  /* 10xxxxxx */
        buffer[2] = 0x80 | ((code >> 6) & 0x3F);   /* 10xxxxxx */
        buffer[3] = 0x80 | (code & 0x3F);          /* 10xxxxxx */
        return 4;
    }
    return 0;
}

您为其提供一个无符号字符数组(四个或更大的字符)以及 Unicode 代码点。该函数将返回用 UTF-8 编码代码点所需的字符数,并在数组中分配这些字符。对于上面的代码,该函数将返回 0(未编码)0x10FFFF,但它不会以其他方式检查 Unicode 代码点是否有效。 IE。它是一个简单的编码器,它所知道的关于 Unicode 的所有信息就是代码点来自0 to 0x10FFFF, 包括的。例如,它对代理对一无所知。

请注意,由于代码点明确是无符号整数,因此负参数将根据 C 规则转换为无符号。

您需要编写一个函数来打印每个无符号字符中的至少 8 个有效位(C 标准确实允许更大的字符大小,但 UTF-8 仅使用 8 位字符)。然后,使用上面的函数转换 Unicode 代码点(0 to 0x10FFFF,包含)到 UTF-8 表示形式,并按升序为数组中的每个无符号字符调用位函数,以获得上述转换函数为该代码点返回的无符号字符的计数。

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

将 Unicode 代码点转换为 UTF-8 和 UTF-32 的相关文章

  • 模板类包装任意类型/非类型模板类

    假设我有一个模板类base和一个班级wrapper其中包含一个实例化成员base 我想定义班级wrapper这样它依赖于模板参数包 该参数包只是 传递 给实例化成员base 例如 考虑下面的代码 它工作得很好 include
  • 如何自定义 DataTable 列的排序

    我需要对数据表列的值进行排序 该列包含字符串 整数或混合文本 例如 数据表列包含如下值 23 18 12 store 23 store a1 1283 25 如果我使用对值进行排序Dataview sort 方法会按此顺序产生 12 128
  • 如何知道并加载特定文件夹中的所有图像?

    我有一个应用程序 C Builder 6 0 需要知道特定文件夹中的图像总数 然后我必须加载它们 在 ImageList 或 ComboBoxEx 中 或任何其他控件中 我怎样才能做到这一点 我知道如何在控件中加载图像 或保存在 TList
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • boost线程在中断时不打印退出消息

    我有这段代码用于执行三个线程 其中第二个线程应在按 Enter 时中断并打印退出消息 void input val DO STUFF return void process val DO STUFF try cout lt lt waiti
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • 控制台应用程序 .net Core 2.0 的配置

    在 net Core 1 中我们可以这样做 IConfiguration config new ConfigurationBuilder AddJsonFile appsettings json true true Build 这样就可以使
  • 根据拦截和返回值自动重试客户端WCF调用

    是否可以拦截 WCF 调用的结果并重试该操作 例如 操作的返回值可能包含状态代码 指示我传递到原始调用的会话令牌已过期 在这种情况下 我可以检索新的会话令牌并使用新的会话令牌重试调用 是否可以通过使用 WCF 拦截返回值 检查它 然后以对操
  • glDrawElements 只绘制半个四边形

    这是我的功能 void Object draw2 if mIsInitialised return Tell OpenGL about our vertex and normal data glEnableClientState GL VE
  • 成员初始值设定项列表中的求值顺序是什么?

    我有一个带有一些参数的构造函数 我假设它们是按照列出的顺序初始化的 但在一种情况下 它们似乎是按相反的顺序初始化的 导致中止 当我反转参数时 程序停止中止 下面是我正在使用的语法的示例 a 之前需要初始化b 在这种情况下 你能保证这个初始化
  • charset-utf8 和字符实体

    我建议将我的 windows 1252 XHTML 网页转换为 UTF 8 我的编码中有以下字符实体 39 撇号 9658 右指针 9668 左指针 如果我使用编辑器更改字符集并将页面保存为 UTF 8 撇号保留为字符实体 指针被转换为代码
  • 如何在不使用reinterpret_cast的情况下使用dlsym()加载函数?

    我正在尝试使用 clang tidy 来强制执行 C 核心指南 虽然它确实有很多有效点 但有一件事我无法真正解决 dlsym 返回一个void 我需要以某种方式将其转换为正确的函数指针 为此 我使用reinterpret cast 由于指南
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • 使用 AutoMapper 进行 LINQ GroupBy 聚合

    试图让查询工作 但老实说不确定如何 或者是否可能 进行它 因为我尝试过的一切都不起作用 共查询6个表 Person PersonVote PersonCategory Category City FirstAdminDivision Per
  • 为什么 C 函数不能返回数组类型?

    我是 C 语言新手 想知道 为什么 C 函数不能返回数组类型 我知道数组名是数组第一个值的地址 而数组是 C 中的二等公民 您自己已经回答了这个问题 数组是二等公民 C 按值返回 数组不能按值传递 因此不能返回它们 至于为什么数组不能按值传
  • C# - 为什么我需要初始化 [Out] 参数

    我有几个从本机 dll 导入的方法 使用以下语法 internal static class DllClass DllImport Example dll EntryPoint ExampleFunction public static e

随机推荐

  • Powershell:将 pracl 命令的输出通过管道传输到数组

    pracl 是一个 sysinternal 命令 可用于列出目录的 ACL 我有一个共享列表 我想创建一个 csv 文件 这样对于每个 ACL 条目 我希望共享路径位于一列中 共享权限位于下一列中 我试图通过使用以下代码来做到这一点 inp
  • 数组到 SVG,使用 PHP 的灵活算法

    问题 我有几个不同的数组 例如 0 21 0 001 0 0245 0 31 0 05 1234 1342 1232 1625 2200 2205 1804 5 12 42 2 32 42 my problem now is I m loo
  • 在 Python 中索引浮点值

    我有一个从数据结构生成的浮点数列表 它是一个字典列表 即我已经迭代了整个列表并选择了给定字典中的某些值 现在 我想实际对这些数据点做一些事情 为此我需要对原始位置的一些参考 我尝试简单地使用数据点作为关键 但在尝试和失败之后 我进行了一些挖
  • Google VR Unity Divider、设置和后退按钮隐藏在 v0.9 中

    有谁知道如何禁用最新的 google vr sdk for unity 中的分隔符 设置和后退按钮 我尝试将 NativeUILayerSupported 设置为 false 并将返回值放入旧的 DrawUILayer 中 但它仍然显示 看
  • Web Api - 使用 [FromBody] 属性和 POST 方法时操作参数为空

    我有这个控制器 但我不明白为什么name参数为空 public class DeviceController ApiController HttpPost public void Select FromBody string name pr
  • 全透明OpenGL模型

    解释一下我做错了什么 我已将 3D 模型加载到自编码的 opengl 渲染 v 3 3 中 并尝试使用顶点着色器使其像 xray 效果一样透明 version 330 attribute vec3 coord3d attribute vec
  • Python 通过请求更改 Instagram 个人资料图片

    我正在尝试使用 python post 请求更改我的 Instagram 个人资料图片 但它没有改变 我没有收到任何错误 在回复中 它说他们已经更改了它 但是更改为白色 Instagram 人物照片 而不是我选择的照片 request ur
  • 为什么不能从 ArrayAdapter 添加/删除项目?

    我正在使用一个ArrayAdapter
  • SQL Server 长查询中的表锁 - 解决方案:NoLock?

    我的应用程序中的报告运行一个需要 5 15 秒的查询 仅限于将返回的行数 该查询对我的应用程序的几乎所有主表 客户 销售 单位等 有 8 个联接 一个小工具向我展示 此时 所有这 8 个表都被共享表锁锁定 也就是说 此时不会进行任何更新操作
  • targetSdkVersion 26 在崩溃报告中给出异常

    根据到 2018 年 11 月将目标 SDK 版本更新到 26 的要求 我在几个月前尝试更新我的 gradle 文件并发布了我的应用程序的新版本 将目标 sdk 和编译 sdk 版本更新为 26 从 23 之后 一天之内 我开始在 Fire
  • 未找到 Gradle DSL 方法:“classpath()”

    项目 FeedBack 可能使用不包含该方法的 Android Gradle 插件版本 例如 在 1 1 0 中添加了 testCompile 修复插件版本并同步项目 项目 FeedBack 可能使用不包含该方法的 Gradle 版本 打开
  • 请指出我学习异步Javascript过程中的错误

    我是 Javascript 和异步编程的新手 有些事情让我感到困惑 请指出我学习中的错误 异步函数的回调被放入消息队列中 通过事件循环执行 异步执行是非阻塞的 完成 通过事件循环 功能类似于setTimeout是异步的 异步函数是阻塞的 只
  • 创建不可移动类型的 std::vector

    我有一个std vector named args 我不知道编译时向量的大小 和不可移动类型NonMoveable 我想创建一个与 args 大小相同的向量 因此它等于 NonMovable args 0 additional arg No
  • git log 并在裸仓库上显示

    我在家里本地网络的文件服务器上创建了一个裸存储库 之后 我将现有存储库的一个分支从我的桌面电脑推送到这个新的远程存储库 推送工作完美 似乎所有数据都已到达 gitbranch va 给了我正确的数据 但我无法在裸存储库上使用 git log
  • 某些 bash 脚本中使用的“function”关键字是什么?

    例如 Bash Prog 简介 HOWTO function foo 我在以下位置进行搜索查询info bash并查看 POSIX 的相关章节function关键字但没有找到 What is function某些 bash 脚本中使用的关键
  • Kubernetes 滚动更新是否可以从服务负载均衡器中优雅地删除 Pod

    负载均衡器后面的主机滚动更新的标准做法是优雅地停止轮换主机 这可以通过将主机标记为 不健康 并确保主机不再接收来自负载均衡器的请求来完成 Kubernetes 是否会对由 ReplicationController 管理并为 LoadBal
  • Angular 中的变更检测 API 底层架构

    我正在阅读这篇文章 并对更改检测操作的工作原理感到困惑 https vsavkin com change detection in angular 2 4f216b855d4c 这个概念 Angular 表示它不会进行脏检查 也没有像 An
  • 如何通过 ingress 在 GKE 中启用 cors

    我尝试使用以下注释启用带有入口的 cors 但没有成功 kubernetes io ingress class nginx nginx ingress kubernetes io enable cors true 正确的注释是ingress
  • 是否有一棵树可以对对象进行排序?

    我编写了一个红黑二叉统计树 以获得与红黑树中其他对象可比较的任意对象的排名 我想知道是否有一个 API 类提供相同的功能 如果给定一个等级 该类有一个函数可以返回树中该等级的对象 那就太好了 请注意 红黑 BST 允许在 log n 时间内
  • 将 Unicode 代码点转换为 UTF-8 和 UTF-32

    我想不出一种方法来删除前导零 我的目标是for循环创建每个数字的 UTF 8 和 UTF 32 版本 例如 对于 UTF 8 我不需要删除前导零吗 有谁有解决方案来解决这个问题 基本上我要问的是 有人有一个简单的解决方案将 Unicode