如何在 C/C++ 中处理 unicode 字符序列?

2023-11-21

在 C 和 C++ 中处理 unicode 字符序列的更便携和简洁的方法是什么?

此外,如何:

-读取unicode字符串

- 将 unicode 字符串转换为 ASCII 以节省一些字节(如果用户仅输入 ASCII)

-打印unicode字符串

我也应该使用环境吗?例如,我读过有关 LC_CTYPE 的内容,作为开发人员我应该关心它吗?


有哪些比较便携、干净 处理 unicode 字符的方法 C 和 C++ 中的序列?

让程序中的所有字符串都是UTF-8、UTF-16 或 UTF-32。如果由于某种原因您需要使用非 Unicode 编码,请对输入和输出进行转换。

读取unicode字符串

与读取 ASCII 文件的方式相同。但仍然有很多非 Unicode 数据,因此您需要检查数据是否is统一码。如果不是(或者如果您的首选内部编码是 UTF-32,而它是 UTF-8),则需要对其进行转换。

  • 通过验证可以可靠地检测到 UTF-8 和 UTF-32。
  • UTF-16 可以通过 BOM 的存在来检测。
  • 如果不是 UTF 编码,则可能采用 ISO-8859-1 或 windows-1252。

将 unicode 字符串转换为 ASCII 为 节省一些字节(如果用户只 输入 ASCII)

不。如果您的数据都是 ASCII,那么 UTF-8 将占用完全相同的空间量。如果不是,转换为 ASCII 时您将丢失信息。如果您关心节省字节。

  • 选择最佳的 UTF 编码。对于字符 U+0000 到 U+007F,UTF-8 是最小的。对于字符 U+0800 到 U+FFFF,UTF-16 是最小的。
  • 使用 gzip 等数据压缩。有一种专门为Unicode设计的SCSU编码,但我不知道它有多好。

打印 unicode 字符串

编写 UTF-8 与编写 ASCII 没有什么不同。

除了在 Windows 命令提示符下,因为它仍然使用旧的“OEM”代码页。在那里你可以使用写入控制台W带有 UTF-16 字符串。

我也应该使用环境吗? 例如,我读过有关 LC_CTYPE 的内容, 作为开发人员我应该关心它吗 ?

LC_CTYPE是从每种语言都有自己的字符编码、因此也有自己的时代遗留下来的ctype.h功能。今天,Unicode 字符数据库照顾这个。 Unicode 的美妙之处在于分开来自区域设置处理的字符编码处理(除了特殊的大写/小写规则立陶宛语、土耳其语和阿塞拜疆语)。

但每种语言仍然有自己的排序规则和数字格式规则,因此您仍然需要这些语言的区域设置。您需要将区域设置的字符编码设置为 UTF-8。

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

如何在 C/C++ 中处理 unicode 字符序列? 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • jQuery 幻灯片图像转换

    我的 jQuery 幻灯片有问题 我似乎无法弄清楚 在图像转换期间 幻灯片将闪烁白色 而不是很好地淡入下一张图片 我相信这与以下代码行有关 slideshow img first fadeOut 1000 next fadeIn 1000
  • iOS 11 主屏幕 Web 应用程序中的 Cookie 过期

    iOS 11 自 iOS 11 0 1 起仍然存在问题 主屏幕 Web 应用程序和 Cookie 似乎存在问题 当从服务器设置 cookie 时 iOS 11 似乎会间歇性地删除 cookie 其他时候 当服务器使 cookie 过期时 i
  • 如何判断按下的是哪个 SHIFT 键?

    在我的游戏中 我希望能够使用左右 Shift 键来实现不同的功能 在Java 或其他语言 中 有什么方法可以区分这两者吗 The KeyEvent class has only VK SHIFT which corresponds to b
  • Python 相当于 R 的 poly() 函数?

    我试图了解如何使用 scikit learn 或其他模块 在 R 中复制 poly 函数 例如 假设我在 R 中有一个向量 a lt c 1 10 我想生成三阶多项式 polynomial lt poly a 3 我得到以下信息 1 2 3
  • 在 C# 中将对象数组转换为 XML

    我知道没有内置转换器可以将对象数组转换为 XML 是否有一种快速基本的方法可以从数组中创建 XML 以帮助我在这个 XML 和我拥有的另一个 XML 之间进行 LINQ to XML 联接 您可以使用 Linq to XML 将现有数据结构
  • array.find 不适用于 Babel

    我正在使用 Babel 转译我的 ES2015 代码 然而它并没有翻译find对于数组 以下行引发错误TypeError options find is not a function let options 2 23 4 options f
  • 通过 PHP 加载图像

    我正在尝试通过 PHP 加载图像 但我不知道如何 文件名存储在数据库中 例如image jpg if GET image Client requesting image so retrieve it from DB id mysql rea
  • 如何让 gcc 跳过错误,但仍然输出它们。

    是否可以强制 gcc 报告错误 但继续编译它们 本质上 我试图在 c 文件中生成错误列表 但 gcc 总是在出现第一个错误时终止 我已经在谷歌上搜索了一段时间 据我所知 这并不是一个明显需要解决的问题 当 GCC 无法继续前进时 它就会终止
  • NodeJS keydown/keyup 事件

    我有兴趣看看是否可以将功能绑定到用户按下 释放键盘上的按键 到目前为止 我已经能够通过以下方式获取按键事件keypress模块和process stdin的原始模式 var keypress require keypress keypres
  • 错误:应用程序:transformClassesWithDexBuilderForDebug

    我在这个包中有一个 HillfortStore 类 package org wit hillforts models 弄乱了类中的包名称 缺少 s package org wit hillforts model 将类导入到具有错误包名的其他
  • 为什么一些有经验的程序员在变量之前写与值的比较? [复制]

    这个问题在这里已经有答案了 可能的重复 如何检查是否相等 0 i 或 i 0 为什么在 C 中经常看到 null variable 而不是 variable null 我一直在查看一些奇怪的教程以及一些 DirectX 代码 并注意到许多经
  • 如何读取特定文件夹内的所有文件

    我想读取 c net 中特定文件夹内的所有 xml 文件 XDocument doc2 XDocument Load PG SMNR XMLDataSourceUtil GetXMLFilePath Locale Products cate
  • 从 CLOB(包含 XML)中提取特定值,同时为表的每一行创建一个分隔字符串。某些行上的 CLOB 值可能为空

    一些背景 数据库是Oracle 我正在尝试为表的每一行创建一个分隔字符串 分隔字符串的某些值必须来自 CLOB 包含 XML 某些行上的 CLOB 可能为空 这就是问题所在 例如 我有一个表 Item 其中包含以下行 Item ID Ite
  • 重新安装 Microsoft Visual Studio Asp.net MVC 5 脚手架扩展

    我在 Asp Net MVC 5 和 Visual studio 2013 中遇到脚手架问题 我尝试通过首先卸载扩展 Microsoft Visual Studio Asp net MVC 5 Scaffolding 来重新安装它 但我找不
  • AngularJS 和 Windows 8 路由错误

    我正在尝试使用 Visual Studio 2012 在 Windows 8 1 上使用 AngularJS 创建 HTML5 JS CSS3 应用程序 我目前坚持将参数发送到其他视图 当谷歌搜索时 我看到几个使用的例子 a href li
  • Matplotlib 子图 y 轴刻度与上面的图重叠

    我正在尝试绘制 3 个子图 它们之间没有任何空白 默认 y 轴刻度标签使用显示在 y 轴右上角的刻度 下例中的 1e 8 除了与上面的图重叠的下面两个图之外 这很好 有人知道怎么修这个东西吗 下面是一个小例子 import numpy as
  • Nodejs 7 的异步等待

    我已经安装了nodejs 7 3 0 并且有以下代码 let getContent function url return new pending promise return new Promise resolve reject gt s
  • 允许在录制视频时播放音乐,如 Snapchat ios

    首先我想讨论一下发生在snapchat 在 Snapchat 中 当您开始录制视频且歌曲在后台运行时 它允许在录制视频时继续播放该歌曲 录制视频后您还可以在背景中听到该歌曲 我在用SCR记录器用于使用我的自定义布局录制视频和捕获图像 现在我
  • git:如何将分支的根移回两次提交

    假设我有 A B C D E F master G H new feature branch 现在我意识到实际上提交了 B 和 C 属于新功能 所以我想将它们移动到 新功能分支 换句话说 我希望 新功能分支 从 A 开始 并包含提交 B 和
  • 如何在 C/C++ 中处理 unicode 字符序列?

    在 C 和 C 中处理 unicode 字符序列的更便携和简洁的方法是什么 此外 如何 读取unicode字符串 将 unicode 字符串转换为 ASCII 以节省一些字节 如果用户仅输入 ASCII 打印unicode字符串 我也应该使