Unicode编码

简介: Unicode编码

Lua5.3 开始, Lua 语言引入了一个用于操作 UTF-8 编码的 Unicode 字符串的标准库。当然,在引入这个标准库之前, Lua 语言也提供了对 UTF-8 字符串的合理支持。


UTF-8 是Web环境中用于Unicode的主要编码之一。由于 UTF-8 编码与ASCII编码部分兼容,所以 UTF-8 对于Lua语言来说也是一种理想的编码方式。这种兼容性保证了用于ASCII字符串的一些字符串操作技巧无需修改就可以用于 UTF-8 字符串。


UTF-8 使用变长的多个字节来编码一个 Unicode 字符。例如, UTF-8 编码使用一个字节 65 来代表 A ,使用两个字节 215-144 代表希伯来语(Hebrew)字符 Aleph (其在 Unicode 中的编码是 1488 )。 UTF-8 使用一个字节表示所有 ASCII 范围内的字符(小于 128 )。对于其他字符,则使用字节序列表示,其中第一个字节的范围是 [194, 244] ,而后续的字节范围是 [128, 191] 。更准确地说,对于两个字节组成的序列来说,第一个字节的范围是 [194, 223] ;对于三个字节组成的序列来说,第一个字节的范围是: [224, 239] ;对于四个字节组成的序列来说,第一个字节的范围是 [24., 224]这些范围相互之间均不重叠。这种特点保证了任意字符对应的字节序列不会在其他字符对应的字节序列中出现。特别地,一个小于 128 的字节永远不会出现在多字节序列中,它只会代表与之对应的 ASCII 字符。


Lua 语言中的一些机制对 UTF-8 字符串来说同样“有效”。由于 Lua 语言使用 8 个字节来编码字符串,所以可以像操作其他字符串一样读写和存储 UTF-8 字符串。字符串常量也可以包含 UTF-8 数据(当然,读者可能需要使用支持 UTF-8 编码的编辑器来处理使用 UTF-8 编码的源文件)。字符串连接对 UTF-8 字符串同样适用。对字符串的比较(小于、小于等于等等)会按照 Unicode 编码中的字符代码顺序进行。


Lua 语言的操作系统库和输入输出是与对应系统之间的主要接口,所以他们是否支持 UTF-8 取决于对应的操作系统。例如,在 Linux 操作系统下文件名使用 UTF-8 编码,而在 Windows 操作系统下文件名使用 UTF-16 编码。因此,如果要在 Windows 操作系统中处理 Unicode 文件名,那么要么使用额外的库,要么就修改 Lua 语言的标准库。


函数 reverseupperlowerbytechar 不适用与 UTF-8 字符串,这是因为他们针对的都是一字节字符。函数 string.formatstring.rep 适用与 UTF-8 字符串(格式选项 '%c' 除外,该格式选项针对一字节字符)。函数 string.lenstring.sub 可以用于 UTF-8 字符串,其中的索引以字节为单位而不是以字符为单位。通常,这些函数就够用了。


函数 utf8.len 返回指定字符串中 UTF-8 字符(代码点)的个数。此外,该函数还会验证字符串,如果该函数发现字符串中包含无效的字节序列,则返回 false 外加第一个无效字节的位置


函数 utf8.charutf8.codepointUTF-8 环境下等价 于string.charstring.byte


提示

utf8 库中大多数函数使用字节为索引。例如,调用 string.codepoint(s, i, j)ij 都会被当做字符串 s 中的字节位置。如果想使用字符位置作为索引,那么可以通过函数 utf8.offset 把字符位置转换为字节位置。


utf8 标准库中的最后一个函数是 utf8.codes ,该函数用于遍历 UTF-8 字符串中的每一个字符。


不幸的是,除了上述的内容外, Lua 语言没有再提供其他机制。 Unicode 具有如此多稀奇古怪的特性,以至于想从特定的语言中抽象出其中的任意一个概念基本上是不太可能的。由于 Unicode 编码的字符字素(grapheme)之间没有一对一个关系,所以甚至连字符的概念都是模糊的。其他诸如字母之类的基本概念在不同语系中也有差异。由于这些复杂性的存在,如果想支持完整的 Unicode 就需要巨大的表,而这又与 Lua 语言精简的大小想矛盾。因此,对于这些特殊需求来说,最好的选择就是使用外部库

目录
相关文章
|
机器学习/深度学习 编解码 人工智能
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
随着人工智能、大数据和深度学习等领域的快速发展,GPU服务器的需求日益增长。阿里云的GPU服务器凭借强大的计算能力和灵活的资源配置,成为众多用户的首选。很多用户比较关心gpu云服务器的收费标准与活动价格情况,目前计算型gn6v实例云服务器一周价格为2138.27元/1周起,月付价格为3830.00元/1个月起;计算型gn7i实例云服务器一周价格为1793.30元/1周起,月付价格为3213.99元/1个月起;计算型 gn6i实例云服务器一周价格为942.11元/1周起,月付价格为1694.00元/1个月起。本文为大家整理汇总了gpu云服务器的最新收费标准与活动价格情况,以供参考。
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
|
存储 缓存 API
电商行业中 API 接口的常见问题和解决方法
本文探讨了电商行业中API接口的常见问题及解决方法。涵盖数据准确性(如数据不一致、数据缺失)、性能问题(如响应时间过长、吞吐量不足)、安全问题(如身份认证与授权、数据泄露风险)和兼容性问题(如接口版本兼容性、系统兼容性)。通过优化数据同步机制、缓存策略、网络配置、服务器负载均衡、代码逻辑,以及采用安全的身份认证方式和加密技术,结合实际代码示例,帮助开发者提升API接口的稳定性和安全性,确保电商业务顺利运行。
585 11
|
存储 运维 负载均衡
智能存储解决方案:探索 TDengine 的多级存储功能
在当今数据驱动的时代,如何高效地存储和管理海量数据已成为企业面临的一大挑战。为了应对这一需求,TDengine Enterprise 不仅支持使用对象存储(S3),还早已引入了独特的多级存储功能。这一功能不仅能够降低存储成本,还能显著提升数据写入性能,并简化系统维护流程。
273 2
|
Web App开发 前端开发 开发工具
2024前端开发工具推荐
本文推荐了2024年最受前端开发者欢迎的十款工具,包括Visual Studio Code、Dreamweaver、Sublime Text、WebStorm、Atom、HBuilder、Chrome Developer Tools、Figma、Postman和Git。这些工具覆盖了代码编辑、调试、版本控制及API开发等多个方面,旨在帮助开发者提高效率和代码质量,让开发工作更高效、更愉快。
|
存储 API 虚拟化
OpenStack私有云裸机物理服务器角色规划
【4月更文挑战第23天】企业私有云通常由管理节点、控制节点、计算节点、存储节点和网络节点组成的物理服务器集群构成
|
网络协议 Linux 网络安全
GitLab安装和使用指南
GitLab安装和使用指南
1072 0
|
存储 缓存 自然语言处理
小刚带你深入浅出理解Lua语言
前言这篇文章并不是针对某个知识点深入剖析,而是聚焦在Lua语言的关键知识点覆盖和关键使用问题列举描述。能够让学习者对Lua整体有个认识(使用一门新的语言不仅仅在用的时候适应它,而是知道怎么善于使用它),同时也可以作为一个工具文档在Lua中遇到具体问题的时候能从这里索引到相应的知识点和Lua的一些原理,得到启发。 1、Lua语言的特点简单的说Lua语言是一个可扩展的嵌入型的脚本语言。它具有以下的特点
小刚带你深入浅出理解Lua语言
|
存储 数据可视化 安全
|
存储 缓存 算法
ffmpeg 音视频同步进阶 剖析:ffmpeg音视频同步中特殊情况处理策略
ffmpeg 音视频同步进阶 剖析:ffmpeg音视频同步中特殊情况处理策略
768 0
|
人工智能 搜索推荐 机器人
神奇智能搜索引擎:perplexity智能搜索引擎(ChatGPT与Edge合体——联网版chatGPT)
神奇智能搜索引擎:perplexity智能搜索引擎(ChatGPT与Edge合体——联网版chatGPT)