是否存在 UTF-8 编码中未使用的字节?

2024-05-07

据我了解,UTF-8 是 ASCII 的超集,因此包括不用于表示可打印字符的控制字符。

我的问题是:是否有任何字节(256 个不同的字节)未被 UTF-8 编码使用?

我想知道你是否可以转换/编码UTF-8 文本转二进制。

这是我的思考过程:

我不知道 UTF-8 文本编码是如何工作的,也不知道它如何使用这么多字符(只知道它对非 ASCII (Latin-1??) 中的字符使用多个字节),但我知道 ASCII 文本在 UTF 中是有效的-8 所以控制字符(字节0-30) http://en.wikipedia.org/wiki/UTF-8#Codepage_layoutUTF-8 编码的使用方式没有不同,但它们同时不用于显示字符,对吗?

因此,在 256 个不同字节中,仅使用了约 230 个字节。对于 1000(二进制)长的 Unicode 文本,只有 1000^230 个不同的文本?正确的?

如果这是真的,你可以convert将其转换为小于 1000 字节的二进制数据。

沃尔夫拉姆阿尔法: 1000 字节的 unicode(假设 unicode 只使用 256 个不同字节中的 230 个)--> 496 字节 http://www.wolframalpha.com/input/?i=pow%28pow%281000%2C230%29%2C1%2F256%29


是的,可以设计出比 UTF-8 更节省空间的编码,但您必须权衡利弊。

例如,如果您的主要目标是(例如)ISO-8859-1,您可以将字符代码 0xA0-0xFF 映射到自身,并且仅使用 0x80-0x9F 来选择扩展映射,有点像 UTF-8 使用(几乎)所有 0x80-0xFF 来编码可以表示所有 Unicode > 0x80 的序列。当大部分文本不使用 0x80-0x9F 或 0x0100-0x1EFFFFFFFF 范围内的字符时,您将获得显着的优势,但如果情况并非如此,则会相应地损失。

或者您可能要求用户保留一个状态变量,该变量告诉您​​当前选择的字符范围,并使流中的每个字节充当该范围的索引。这有很大的缺点,但很久以前就是这样做的(例如 ISO-2022)。

Ken Thompson 和 Rob Pike 著名干预之前的原始 UTF-8 草案可能也比最终规范更节省空间,但他们引入的更改具有一些非常有吸引力的属性,用(我认为)一些空间效率换取了上下文的缺乏歧义。

我强烈建议您阅读关于 UTF-8 的维基百科文章 http://en.wikipedia.org/wiki/UTF-8了解设计需求——尽管您可能需要预留一个小时或更长时间来遵循脚注等,但只需几分钟即可掌握规范。(汤普森轶事目前是脚注#7。)

总而言之,除非您正在从事太空旅行或某些类似的效率密集型应用程序,否则失去 UTF-8 兼容性可能不值得您已经花费的时间,您应该立即停止。

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

是否存在 UTF-8 编码中未使用的字节? 的相关文章

  • 如何使用 Unicode 十六进制值 (UTF-16) 在 Swift 中表达字符串

    我想在 Swift 中使用十六进制值编写 Unicode 字符串 我已阅读文档 https developer apple com library prerelease ios documentation Swift Conceptual
  • 是否有一个看起来像“钥匙”图标的 Unicode 字形? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Unicode 有一百万个类似图标的字形 但它们并不总是很容易搜索 因为我并不总是知道它们是什么样子 是否有一个看起来像 钥匙 的 Unicode 字
  • 计算数字的二进制表示形式中 1 的数量的最佳方法。 (MIPS)

    我需要计算二进制数中 1 的数量 比如说 5 所以 00001001 将是 2 或 n 2 我正在使用 MIPS 最好的方法来做到这一点 最好的方法是count them 您可以检查是否设置了最低有效位 a1 by and用一个来代替它 如
  • 验证假名输入

    我正在开发一个允许用户输入日语字符的应用程序 我试图想出一种方法来确定用户的输入是否是日语假名 平假名 片假名或汉字 应用程序中的某些字段不适合输入拉丁文文本 我需要一种方法将某些字段限制为仅限汉字或仅限片假名等 该项目使用UTF 8编码
  • 使用 IE11 的工作程序使用 multipart/form-data 发送二进制数据

    我正在尝试发送multipart form data来自 IE 的工作人员 我已经使用 Chrome Firefox Safari 完成了此操作formData对象 不支持IE 我需要一个手动的 我发送的二进制数据是 crypto js 加
  • 如何将 Unicode 字符转换为简单形式? [复制]

    这个问题在这里已经有答案了 有没有一个Go库可以Sj str m作为输入和返回Sjostrom作为输出 您可以使用golang org x text unicode norm来处理这个问题 package main import fmt i
  • Java正则表达式:为什么数字[0-9]、逗号等不是unicode?

    class Test public static void main String args String regex p L System out println 0 matches regex 上面的代码打印 false 但我期待 tr
  • 防止字符串中出现西里尔文/希腊文/中文 - C# 4.0

    我们有一个支持希腊语 西里尔语 中文字符的系统 使用 ASP NET C 4 0 但第三方系统似乎无法正常工作 为了避免为此第三方系统输入数据时出现问题 我想将文本字段限制为仅接受英语或重音字符 但返回其他字符的验证错误 我怎样才能做到这一
  • 使用 pygame 显示 unicode 符号

    我检查了其他答案 但不明白为什么我的代码错误地显示 This is what I currently see https i stack imgur com 8tNIK png 这是关于文本渲染的相关代码 font pygame font
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • Unicode、正则表达式和 PyPy

    我写了一个程序来添加 有限 统一码支持 https stackoverflow com q 1832893 520779到 Python 正则表达式 虽然它在 CPython 2 5 2 上工作正常 但在 PyPy 上不起作用 1 5 0
  • 控制台应用程序中使用 Unicode 字符的 _tprintf

    我正在从 Unicode 构建的控制台应用程序 使用 C 和 Visual Studio 2008 执行这个简单的输出 此代码旨在在 Windows 上运行 tprintf L Some sample string n 一切正常 但是如果我
  • 使用 WriteConsoleOutput 用 c# 编写 Unicode

    我正在尝试使用WriteConsoleOutput来自 kernel32 dll 的函数 但是我无法正确显示 unicode 字符 它们总是显示为错误的字符 我尝试过使用 Console OutputEncoding System Text
  • 如何在 Linux 中重新添加 unicode 字节顺序标记?

    我有一个相当大的 SQL 文件 它以 FFFE 的字节顺序标记开头 我使用 unicode 感知的 linux 分割工具将此文件分割成 100 000 行块 但是当将这些传递回窗口时 它确实not与第一个部分以外的任何部分一样 只是它具有
  • 将 pandas DataFrame 写入 unicode 中的 JSON

    我正在尝试将包含 unicode 的 pandas DataFrame 写入 json 但是内置的 to json函数对字符进行转义 我该如何解决 Example import pandas as pd df pd DataFrame a
  • API 调用时出现 UnicodeEncodeError (json)

    我正在尝试打印此 API 调用的结果 但收到 UnicodeEncodeError 可能是超级菜鸟问题 但非常感谢任何帮助 import http client import json api key hidden connection h
  • 用 unicode 字符删除纯文本?

    是否可以删除代码注释中不需要的修改过的单词 由于开发人员仍然在黑暗时代更简单的纯文本时代进行编码 其中文本无法使用隐藏标识符进行格式化 因此实现这一目标的唯一方法是使用 Unicode 字符 由于某些unicode字符可以扩展 y o n
  • Python 删除额外的特殊 unicode 字符

    我正在 python 中处理一些文本 它内部已经采用 unicode 格式 但我想删除一些特殊字符并用更标准的版本替换它们 我目前有一条看起来像这样的线路 但它变得越来越复杂 我发现它最终会带来更多麻烦 tmp infile lower r
  • 带有二进制数据的 Bash echo 命令?

    有人可以解释一下为什么这个脚本有时只返回十六进制字符串表示形式的 15 个字节吗 for i in 1 10 do API IV openssl rand 16 API IV HEX echo n API IV od vt x1 w16 a
  • 即使我使用 SetWindowTextW(),Unicode 文本在编辑框中显示为问号

    我遇到了 unicode 文件名在编辑框中显示为问号的问题 当我将 unicode 字符 例如阿拉伯语或泰语 粘贴到编辑框中时 它们会正确显示 但在运行此代码后 它们会变成问号 怎么会 WCHAR buf 100 GetWindowText

随机推荐