【问题标题】:is the ASCII charset endian-safe?ASCII 字符集字节序安全吗?
【发布时间】:2013-05-27 01:36:24
【问题描述】:

我在做数学运算,如果我以二进制表示形式(二进制模式的二进制文件)中的每一位信息(变量的内容)始终小于或等于 1 个字节,那么无论字节顺序如何,我都是安全的在平台上实现,这意味着 ASCII 字符集根据定义是字节序安全或双字节序的,因为它提供 2^8 排列? 我认为 UTF-8 不是双端的。

【问题讨论】:

  • 没有为一个字节定义字节顺序。 UTF-8 既可以是小端也可以是大端(就像任何其他 Unicode 编码一样)。
  • 你对 utf-8 是什么感到困惑。一个 utf-8 编码的字符串是一个字节序列,不受字节序的影响。 en.wikipedia.org/wiki/UTF-8
  • @H2CO3 CAN 是,但我的观点是关于安全性,如果我有一个 ASCII 字符,我可以假设 char 总是正确再现,我应该使用 UTF8关心那个 UTF 字符集的实现。
  • @PascalCuoq 任何 UTF8 实现都不仅仅是一个字符集,UTF8 还包含有关文本流的信息,我不确定 UTF8 是否与 UTF8 标准的任何其他实现一样安全,而且 ASCII 只是一个带有字形字符关联的表,没什么特别的,它非常简单。
  • @user2384250 “我不确定 UTF8 是否像 UTF8 标准的任何其他实现一样安全”甚至意味着什么?无论如何,冒着重复自己的风险,一个 utf-8 编码的字符串是一个字节序列。阅读我提供的链接。第一句话是“到 1992 年初,人们开始寻找多字节字符集的良好字节流编码”。猜猜故事会如何结束?

标签: encoding utf-8 character-encoding ascii


【解决方案1】:

字节序是指字节顺序,即多字节序列的字节出现的顺序。

对于 ASCII 它没有意义,因为没有多字节序列。

对于 UTF-8,UTF-8 标准已经精确且明确地定义了其所有多字节序列中的字节顺序。因此需要一个额外的规则(例如 big-endian 或 little-endian)来指定或澄清这个顺序。所以……也不适用。

【讨论】:

  • 所以 UTF8 无论如何都是安全的?和 UTF-16 ?
  • UTF-16 使用固定大小(16 位)的多字节代码单元,因此如果适用,还有字节序的概念。遗憾的是,Unicode 联盟选择不为标准规定一种或另一种字节序,因此我们只剩下 UTF-16 的两个“变体”。这只是UTF-16 should be avoided whenever possible 的原因之一。
  • 应该避免它的另一个主要原因是它是“两全其美”的编码:它是可变长度编码(不像 UTF-32/UCS-4,你应该使用当您需要固定长度的代码单元时)和 ASCII 不兼容(与 UTF-8 不同,您应该在几乎所有其他情况下都使用它)。
猜你喜欢
  • 1970-01-01
  • 2012-01-23
  • 2011-09-05
  • 1970-01-01
  • 2015-10-12
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多