`
laughingchs
  • 浏览: 69288 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

编码小记

 
阅读更多
代码点、字符编码方案、UTF-16:这些是指什么? 不幸的是,引入增补字符使字符模型变得更加复杂了。在过去,我们可以简单地说“字符”,在一个基于 Unicode 的环境(例如 Java 平台)中,假定字符有 16 位,而现在我们需要更多的术语。我们会尽量介绍得相对简单一些 — 如需了解所有详细的讨论信息,您可以阅读 Unicode 标准第 2 章或 Unicode 技术报告 17“字符编码模型”。Unicode 专业人士可略过所有介绍直接参阅本部分中的最后定义。 字符是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。 字符集是字符的集合。例如,汉字字符是中国人最先发明的字符,在中文、日文、韩文和越南文的书写中使用。 编码字符集是一个字符集,它为每一个字符分配一个唯一数字。Unicode 标准的核心是一个编码字符集,字母“A”的编码为 004116 和字符“€”的编码为 20AC16。Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“U+”,所以“A”的编码书写为“U+0041”。 代码点是指可用于编码字符集的数字。编码字符集定义一个有效的代码点范围,但是并不一定将字符分配给所有这些代码点。有效的 Unicode 代码点范围是 U+0000 至 U+10FFFF。Unicode 4.0 将字符分配给一百多万个代码点中的 96,382 代码点。 增补字符是代码点在 U+10000 至 U+10FFFF 范围之间的字符,也就是那些使用原始的 Unicode 的 16 位设计无法表示的字符。从 U+0000 至 U+FFFF 之间的字符集有时候被称为基本多语言面 (BMP)。因此,每一个 Unicode 字符要么属于 BMP,要么属于增补字符。 字符编码方案是从一个或多个编码字符集到一个或多个固定宽度代码单元序列的映射。最常用的代码单元是字节,但是 16 位或 32 位整数也可用于内部处理。UTF-32、UTF-16 和 UTF-8 是 Unicode 标准的编码字符集的字符编码方案。 UTF-32 即将每一个 Unicode 代码点表示为相同值的 32 位整数。很明显,它是内部处理最方便的表达方式,但是,如果作为一般字符串表达方式,则要消耗更多的内存。 UTF-16 使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码。值 U+0000 至 U+FFFF 编码为一个相同值的 16 位单元。增补字符编码为两个代码单元,第一个单元来自于高代理范围(U+D800 至 U+DBFF),第二个单元来自于低代理范围(U+DC00 至 U+DFFF)。这在概念上可能看起来类似于多字节编码,但是其中有一个重要区别:值 U+D800 至 U+DFFF 保留用于 UTF-16;没有这些值分配字符作为代码点。这意味着,对于一个字符串中的每个单独的代码单元,软件可以识别是否该代码单元表示某个单单元字符,或者是否该代码单元是某个双单元字符的第一个或第二单元。这相当于某些传统的多字节字符编码来说是一个显著的改进,在传统的多字节字符编码中,字节值 0x41 既可能表示字母“A”,也可能是一个双字节字符的第二个字节。 UTF-8 使用一至四个字节的序列对编码 Unicode 代码点进行编码。U+0000 至 U+007F 使用一个字节编码,U+0080 至 U+07FF 使用两个字节,U+0800 至 U+FFFF 使用三个字节,而 U+10000 至 U+10FFFF 使用四个字节。UTF-8 设计原理为:字节值 0x00 至 0x7F 始终表示代码点 U+0000 至 U+007F(Basic Latin 字符子集,它对应 ASCII 字符集)。这些字节值永远不会表示其他代码点,这一特性使 UTF-8 可以很方便地在软件中将特殊的含义赋予某些 ASCII 字符。 下表所示为几个字符不同表达方式的比较:
分享到:
评论

相关推荐

    python进行爬虫小记

    在处理中文编码问题时,可能需要设置`res.encoding`为正确的字符编码,如`utf-8`。 解析HTML页面有多种方法。正则表达式是一种常见的方式,可以匹配特定的字符串模式。例如,使用`re`库编写的正则表达式可以匹配并...

    Hessian 的字段序列化小记

    本文将围绕"Hessian的字段序列化小记"这一主题,深入探讨Hessian的工作原理、序列化过程以及其在实际应用中的价值。 Hessian的目标是通过减少数据传输的体积来提高网络通信的效率。相比于XML和JSON等文本格式,...

    spring 小记

    这篇小记将深入探讨Spring的主要组件和关键特性,带你一步步走进Spring的世界。 首先,我们要理解Spring的核心——依赖注入。在传统的Java程序中,对象之间的依赖关系通常是硬编码的,这使得代码难以测试和维护。...

    EventBus之小记源码

    这个库由 Greenrobot 开发,旨在替代基于回调或静态方法的硬编码事件发布/订阅方式,提供了一种解耦、高效且易于使用的事件传递机制。在 Android 开发中,EventBus 的使用能够帮助开发者实现各个组件间的松耦合通信...

    Python django Extjs 项目开发中的错误小记

    - 有关'decimal' codec错误问题,可能是因为编码不支持,特别是涉及到中文字符时。在SQL Server中,Decimal类型属于浮点数类型,但是编码必须支持相关字符。 - 数据库字段类型可能需要根据实际使用场景选择,例如...

    windows下部署tomcat项目小记

    4. **编码问题**:检查字符集设置,确保与项目编码一致。 5. **异常处理**:查看Tomcat的`logs/catalina.out`日志文件,它通常会显示详细的错误信息,帮助定位问题。 总的来说,Windows下部署Tomcat项目需要对Java ...

    Thrift小记

    服务端接收到请求后,Thrift的服务器框架会解码请求,调用相应的处理程序方法,并将结果编码回客户端。 在开发过程中,Thrift提供了工具来生成服务端和客户端的代码。例如,对于Java,使用thrift命令行工具可以生成...

    编码总结

    目录爬虫编码总结原因解决方案非正规解决方案python上的一些总结中文用 unicode 表示总结编码与解码decode解码encode编码raw_input相等陷阱小记编码错误问题Illegal Multibyte SequenceInvalid Start Byte总结 ...

    thinkphp5.0反序列化链小记.pdf

    需要注意的是,根据作者的测试,使用`base64`编码的payload可能无法成功执行,而`urlencode`编码则可以有效避免这一问题。 - 通过命令行生成payload: ```bash ./phpggc ThinkPHP/FW1 ../runtime/ ~/Desktop/...

    小记无线遥控模块振荡电阻匹配问题

    无线遥控模块一般由发射/接收单元以及PT2262或PT2272编码/解码芯片组成。发射模块使用PT2262芯片进行编码,它按照设定的地址和数据格式输出信号;接收模块则采用PT2272芯片进行解码,它会识别信号中的地址,并将其与...

    工作小记:企业微信 嵌H5页面 用户权限获取匹配.doc

    ### 工作小记:企业微信嵌H5页面用户权限获取匹配 #### 一、背景与目的 在当前数字化转型的大背景下,企业越来越多地利用移动互联网技术来提升工作效率和服务质量。其中,企业微信作为一种重要的办公协作平台,在...

    android应用登录模块访问mysql数据库小记.pdf

    需要注意的是,为了安全起见,实际生产环境中,不应直接在URL中传递敏感信息(如密码),而是应该使用加密方式传输,且数据库连接的用户名和密码通常会存储在配置文件或环境变量中,而不是硬编码在源代码中。...

    tensorflow 分类损失函数使用小记

    本篇小记将重点探讨在TensorFlow中如何使用分类损失函数,特别是`sparse_categorical_crossentropy`和`categorical_crossentropy`,以及它们与二分类损失函数`BinaryCrossentropy`之间的差异。 首先,我们来看多...

    javascript语言结构小记(一)

    总结来看,JavaScript作为一种灵活的编程语言,它在类型处理上提供了较为宽松的规则,但也因此增加了编码时需要注意的陷阱。了解并熟练掌握其语言结构,对于前端开发者来说,能够更高效地编写代码,减少错误的发生,...

    从seq2seq模型到Transformer以及机器翻译小记

    它由两个主要部分组成:编码器(Encoder)和解码器(Decoder),通常都采用循环神经网络(RNN),如长短期记忆网络(LSTM)。 编码器的作用是读取输入序列,捕捉其语义信息,并将其压缩成一个固定长度的向量,即上...

    详解Vue SPA项目优化小记

    对于较小的图片资源,将其转换为 Base64 编码并内联到 CSS 或 HTML 中,可以减少 HTTP 请求,提高加载速度。 除了以上方法,还可以考虑其他优化策略,如预加载或预读取、图片压缩、提取 CSS 到单独文件、减少 DOM ...

    Producter | 让产品从0到1

    这是一本以App Store首页推荐的成功App为例阐述如何完成一款...此外,《Producter 让产品从0到1》以《小记》这款有代表性的App产品为例,完整还原了一款产品从想法到设计,到编码实现,到上架发布,再到营销的全过程。

    利用python开发app实战的方法

    最近想到尝试用python开发一款app,google搜索了一番后,发现确实有路可寻,目前也有了一些相对成熟的模块,于是便开始了动手实战,过程中发现这其中有很多坑,好在最终依靠google解决了,因此小记一番。 说在前面的...

Global site tag (gtag.js) - Google Analytics