mirror of
https://github.com/krahets/hello-algo.git
synced 2026-06-28 00:24:21 +00:00
deploy
This commit is contained in:
+1
-1
File diff suppressed because one or more lines are too long
@@ -4511,9 +4511,8 @@
|
||||
<h2 id="343-unicode">3.4.3 Unicode 字符集<a class="headerlink" href="#343-unicode" title="Permanent link">¶</a></h2>
|
||||
<p>随着计算机技术的蓬勃发展,字符集与编码标准百花齐放,而这带来了许多问题。一方面,这些字符集一般只定义了特定语言的字符,无法在多语言环境下正常工作。另一方面,同一种语言存在多种字符集标准,如果两台计算机使用的是不同的编码标准,则在信息传递时就会出现乱码。</p>
|
||||
<p>那个时代的研究人员就在想:<strong>如果推出一个足够完整的字符集,将世界范围内的所有语言和符号都收录其中,不就可以解决跨语言环境和乱码问题了吗</strong>?在这种想法的驱动下,一个大而全的字符集 Unicode 应运而生。</p>
|
||||
<p><u>Unicode</u> 的中文名称为“统一码”,理论上能容纳 100 多万个字符。它致力于将全球范围内的字符纳入统一的字符集之中,提供一种通用的字符集来处理和显示各种语言文字,减少因为编码标准不同而产生的乱码问题。</p>
|
||||
<p>自 1991 年发布以来,Unicode 不断扩充新的语言与字符。截至 2022 年 9 月,Unicode 已经包含 149186 个字符,包括各种语言的字符、符号甚至表情符号等。在庞大的 Unicode 字符集中,常用的字符占用 2 字节,有些生僻的字符占用 3 字节甚至 4 字节。</p>
|
||||
<p>Unicode 是一种通用字符集,本质上是给每个字符分配一个编号(称为“码点”),<strong>但它并没有规定在计算机中如何存储这些字符码点</strong>。我们不禁会问:当多种长度的 Unicode 码点同时出现在一个文本中时,系统如何解析字符?例如给定一个长度为 2 字节的编码,系统如何确认它是一个 2 字节的字符还是两个 1 字节的字符?</p>
|
||||
<p><u>Unicode</u> 的中文名称为“统一码”,理论上能容纳 100 多万个字符。它致力于将全球范围内的字符纳入统一的字符集之中,提供一种通用的字符集来处理和显示各种语言文字,减少因为编码标准不同而产生的乱码问题。自 1991 年发布以来,Unicode 不断扩充新的语言与字符。截至 2022 年 9 月,Unicode 已经包含 149186 个字符,包括各种语言的字符、符号甚至表情符号等。</p>
|
||||
<p>Unicode 作为一种通用字符集,本质上是给每个字符分配唯一的“码点”(字符编号),其取值范围为 U+0000 至 U+10FFFF,构成了统一的字符编号空间。然而,<strong>Unicode 并没有规定在计算机中如何存储这些字符码点</strong>。我们不禁会问:当多种长度的 Unicode 码点同时出现在一个文本中时,系统如何解析字符?例如给定一个长度为 2 字节的编码,系统如何确认它是一个 2 字节的字符还是两个 1 字节的字符?</p>
|
||||
<p>对于以上问题,<strong>一种直接的解决方案是将所有字符存储为等长的编码</strong>。如图 3-7 所示,“Hello”中的每个字符占用 1 字节,“算法”中的每个字符占用 2 字节。我们可以通过高位填 0 将“Hello 算法”中的所有字符都编码为 2 字节长度。这样系统就可以每隔 2 字节解析一个字符,恢复这个短语的内容了。</p>
|
||||
<p><img alt="Unicode 编码示例" class="animation-figure" src="../character_encoding.assets/unicode_hello_algo.png" /></p>
|
||||
<p align="center"> 图 3-7 Unicode 编码示例 </p>
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -4501,7 +4501,7 @@
|
||||
|
||||
<!-- Page content -->
|
||||
<h1 id="43-list">4.3 List<a class="headerlink" href="#43-list" title="Permanent link">¶</a></h1>
|
||||
<p><u>A list</u> is an abstract data structure that represents an ordered collection of elements. It supports operations such as element access, modification, insertion, deletion, and traversal, without requiring users to worry about capacity limits. Lists can be implemented using linked lists or arrays.</p>
|
||||
<p>A <u>list</u> is an abstract data structure concept that represents an ordered collection of elements, supporting operations such as element access, modification, insertion, deletion, and traversal, without requiring users to consider capacity limitations. Lists can be implemented based on linked lists or arrays.</p>
|
||||
<ul>
|
||||
<li>A linked list can naturally be viewed as a list: it supports insertion, deletion, search, and update, and can grow flexibly as needed.</li>
|
||||
<li>An array also supports insertion, deletion, search, and update, but because its length is fixed, it can only be regarded as a list with a capacity limit.</li>
|
||||
|
||||
@@ -4437,9 +4437,8 @@
|
||||
<h2 id="343-unicode-character-set">3.4.3 Unicode Character Set<a class="headerlink" href="#343-unicode-character-set" title="Permanent link">¶</a></h2>
|
||||
<p>With the vigorous development of computer technology, character sets and encoding standards flourished, which brought many problems. On the one hand, these character sets generally only define characters for specific languages and cannot work normally in multilingual environments. On the other hand, multiple character set standards exist for the same language, and if two computers use different encoding standards, garbled characters will appear during information transmission.</p>
|
||||
<p>Researchers of that era thought: <strong>If a sufficiently complete character set were released to include all languages and symbols in the world, wouldn't that solve problems in cross-language environments and eliminate garbled text</strong>? Driven by this idea, a large and comprehensive character set, Unicode, was born.</p>
|
||||
<p><u>Unicode</u>, or Unified Code, can theoretically accommodate over one million characters. It is committed to including characters from around the world into a unified character set, providing a universal character set to handle and display various language texts, reducing garbled character problems caused by different encoding standards.</p>
|
||||
<p>Since its release in 1991, Unicode has continuously expanded to include new languages and characters. As of September 2022, Unicode has included 149,186 characters, including characters, symbols, and even emojis from various languages. In practical storage and encoding schemes for this vast character set, commonly used characters often occupy 2 bytes, while some rare characters occupy 3 bytes or even 4 bytes.</p>
|
||||
<p>Unicode is a universal character set that essentially assigns a number (called a "code point") to each character, <strong>but it does not specify how to store these character code points in computers</strong>. We can't help but ask: when Unicode code points of multiple lengths appear simultaneously in a text, how does the system parse the characters? For example, given an encoding with a length of 2 bytes, how does the system determine whether it is one 2-byte character or two 1-byte characters?</p>
|
||||
<p><u>Unicode</u>, or Unified Code, can theoretically accommodate over one million characters. It is committed to including characters from around the world into a unified character set, providing a universal character set to handle and display various language texts, reducing garbled character problems caused by different encoding standards. Since its release in 1991, Unicode has continuously expanded to include new languages and characters. As of September 2022, Unicode has included 149,186 characters, including characters, symbols, and even emojis from various languages.</p>
|
||||
<p>As a universal character set, Unicode essentially assigns each character a unique "code point" (character identifier), whose range is U+0000 to U+10FFFF, forming a unified character numbering space. However, <strong>Unicode does not specify how to store these character code points in computers</strong>. We can't help but ask: when Unicode code points of multiple lengths appear simultaneously in a text, how does the system parse the characters? For example, given an encoding with a length of 2 bytes, how does the system determine whether it is one 2-byte character or two 1-byte characters?</p>
|
||||
<p>For the above problem, <strong>a straightforward solution is to store all characters as equal-length encodings</strong>. As shown in Figure 3-7, each character in "Hello" occupies 1 byte, and each character in "算法" (algorithm) occupies 2 bytes. We can encode all characters in "Hello 算法" as 2 bytes in length by padding the high bits with 0. In this way, the system can parse one character every 2 bytes and restore the content of this phrase.</p>
|
||||
<p><img alt="Unicode encoding example" class="animation-figure" src="../character_encoding.assets/unicode_hello_algo.png" /></p>
|
||||
<p align="center"> Figure 3-7 Unicode encoding example </p>
|
||||
|
||||
@@ -251,4 +251,4 @@
|
||||
initAutoSlide();
|
||||
}
|
||||
})();
|
||||
/*! update cache: 20260410024939 */
|
||||
/*! update cache: 20260410223942 */
|
||||
|
||||
@@ -8,4 +8,4 @@ document$.subscribe(({ body }) => {
|
||||
],
|
||||
});
|
||||
});
|
||||
/*! update cache: 20260410024939 */
|
||||
/*! update cache: 20260410223942 */
|
||||
|
||||
@@ -15,4 +15,4 @@ window.MathJax = {
|
||||
document$.subscribe(() => {
|
||||
MathJax.typesetPromise();
|
||||
});
|
||||
/*! update cache: 20260410024939 */
|
||||
/*! update cache: 20260410223942 */
|
||||
|
||||
@@ -469,4 +469,4 @@
|
||||
|
||||
return Starfield;
|
||||
});
|
||||
/*! update cache: 20260410024939 */
|
||||
/*! update cache: 20260410223942 */
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -176,4 +176,4 @@
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
}
|
||||
/*! update cache: 20260410024939 */
|
||||
/*! update cache: 20260410223942 */
|
||||
|
||||
@@ -790,4 +790,4 @@ a:hover .device-on-hover {
|
||||
flex: 1 1 30%;
|
||||
}
|
||||
}
|
||||
/*! update cache: 20260410024939 */
|
||||
/*! update cache: 20260410223942 */
|
||||
|
||||
@@ -122,4 +122,4 @@ main .gsc-loading-image {
|
||||
.gsc-reply-content::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
/*! update cache: 20260410024939 */
|
||||
/*! update cache: 20260410223942 */
|
||||
|
||||
@@ -153,4 +153,4 @@ main {
|
||||
.gsc-reply-content::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
/*! update cache: 20260410024939 */
|
||||
/*! update cache: 20260410223942 */
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -4437,9 +4437,8 @@
|
||||
<h2 id="343-unicode">3.4.3 Unicode 文字セット<a class="headerlink" href="#343-unicode" title="Permanent link">¶</a></h2>
|
||||
<p>コンピュータ技術が急速に発展するにつれて、文字セットと符号化規格は百花繚乱の状態となり、それに伴って多くの問題も生じました。一方では、これらの文字セットは通常、特定の言語の文字しか定義しておらず、多言語環境では正常に動作できませんでした。もう一方では、同じ言語にも複数の文字セット規格が存在し、2 台のコンピュータが異なる符号化規格を使っていると、情報伝達の際に文字化けが発生しました。</p>
|
||||
<p>当時の研究者たちはこう考えました。<strong>十分に完全な文字セットを打ち出して、世界中のあらゆる言語と記号をそこに収録すれば、多言語環境や文字化けの問題を解決できるのではないか</strong>。この発想に後押しされて、大規模で包括的な文字セット Unicode が誕生しました。</p>
|
||||
<p><u>Unicode</u> の中国語名は「統一コード」であり、理論上は 100 万を超える文字を収容できます。Unicode は世界中の文字を 1 つの文字セットに統合することを目指し、さまざまな言語の文字を処理・表示できる汎用文字セットを提供することで、符号化規格の違いによる文字化けを減らそうとしています。</p>
|
||||
<p>1991 年の公開以来、Unicode は新しい言語と文字を継続的に拡充してきました。2022 年 9 月時点で、Unicode にはすでに 149186 文字が含まれており、各種言語の文字、記号、さらには絵文字まで収録されています。巨大な Unicode 文字セットでは、よく使われる文字は 2 バイトを占め、一部の珍しい文字は 3 バイト、さらには 4 バイトを占めます。</p>
|
||||
<p>Unicode は汎用文字セットであり、本質的には各文字に番号(「コードポイント」)を割り当てるものですが、<strong>それらのコードポイントをコンピュータ内でどのように保存するかまでは規定していません</strong>。ここで疑問が生じます。長さの異なる Unicode コードポイントが同じテキストに現れたとき、システムはどのように文字を解析するのでしょうか。たとえば長さ 2 バイトの符号が与えられたとき、それが 2 バイトの 1 文字なのか、1 バイトの 2 文字なのかをどう判定するのでしょうか。</p>
|
||||
<p><u>Unicode</u> の中国語名は「統一コード」であり、理論上は 100 万を超える文字を収容できます。Unicode は世界中の文字を 1 つの文字セットに統合することを目指し、さまざまな言語の文字を処理・表示できる汎用文字セットを提供することで、符号化規格の違いによる文字化けを減らそうとしています。1991 年の公開以来、Unicode は新しい言語と文字を継続的に拡充してきました。2022 年 9 月時点で、Unicode にはすでに 149186 文字が含まれており、各種言語の文字、記号、さらには絵文字まで収録されています。</p>
|
||||
<p>Unicode は汎用文字セットとして、本質的には各文字に固有の「コードポイント」(文字番号)を割り当てており、その範囲は U+0000 から U+10FFFF までで、統一された文字番号空間を構成しています。しかし、<strong>Unicode はそれらのコードポイントをコンピュータ内でどのように保存するかまでは規定していません</strong>。ここで疑問が生じます。長さの異なる Unicode コードポイントが同じテキストに現れたとき、システムはどのように文字を解析するのでしょうか。たとえば長さ 2 バイトの符号が与えられたとき、それが 2 バイトの 1 文字なのか、1 バイトの 2 文字なのかをどう判定するのでしょうか。</p>
|
||||
<p>この問題に対して、**すべての文字を固定長の符号として保存する**という直接的な解決策があります。下図のように、「Hello」の各文字は 1 バイト、「アルゴリズム」の各文字は 2 バイトを占めます。上位ビットを 0 で埋めることで、「Hello アルゴリズム」のすべての文字を 2 バイト長にエンコードできます。こうすれば、システムは 2 バイトごとに 1 文字を解析して、この語句の内容を復元できます。</p>
|
||||
<p><img alt="Unicode エンコーディングの例" class="animation-figure" src="../character_encoding.assets/unicode_hello_algo.png" /></p>
|
||||
<p align="center"> 図 3-7 Unicode エンコーディングの例 </p>
|
||||
|
||||
@@ -251,4 +251,4 @@
|
||||
initAutoSlide();
|
||||
}
|
||||
})();
|
||||
/*! update cache: 20260410024950 */
|
||||
/*! update cache: 20260410223953 */
|
||||
|
||||
@@ -8,4 +8,4 @@ document$.subscribe(({ body }) => {
|
||||
],
|
||||
});
|
||||
});
|
||||
/*! update cache: 20260410024950 */
|
||||
/*! update cache: 20260410223953 */
|
||||
|
||||
@@ -15,4 +15,4 @@ window.MathJax = {
|
||||
document$.subscribe(() => {
|
||||
MathJax.typesetPromise();
|
||||
});
|
||||
/*! update cache: 20260410024950 */
|
||||
/*! update cache: 20260410223953 */
|
||||
|
||||
@@ -469,4 +469,4 @@
|
||||
|
||||
return Starfield;
|
||||
});
|
||||
/*! update cache: 20260410024950 */
|
||||
/*! update cache: 20260410223953 */
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -176,4 +176,4 @@
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
}
|
||||
/*! update cache: 20260410024950 */
|
||||
/*! update cache: 20260410223953 */
|
||||
|
||||
@@ -790,4 +790,4 @@ a:hover .device-on-hover {
|
||||
flex: 1 1 30%;
|
||||
}
|
||||
}
|
||||
/*! update cache: 20260410024950 */
|
||||
/*! update cache: 20260410223953 */
|
||||
|
||||
@@ -122,4 +122,4 @@ main .gsc-loading-image {
|
||||
.gsc-reply-content::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
/*! update cache: 20260410024950 */
|
||||
/*! update cache: 20260410223953 */
|
||||
|
||||
@@ -153,4 +153,4 @@ main {
|
||||
.gsc-reply-content::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
/*! update cache: 20260410024950 */
|
||||
/*! update cache: 20260410223953 */
|
||||
|
||||
@@ -251,4 +251,4 @@
|
||||
initAutoSlide();
|
||||
}
|
||||
})();
|
||||
/*! update cache: 20260410024918 */
|
||||
/*! update cache: 20260410223920 */
|
||||
|
||||
@@ -8,4 +8,4 @@ document$.subscribe(({ body }) => {
|
||||
],
|
||||
});
|
||||
});
|
||||
/*! update cache: 20260410024918 */
|
||||
/*! update cache: 20260410223920 */
|
||||
|
||||
@@ -15,4 +15,4 @@ window.MathJax = {
|
||||
document$.subscribe(() => {
|
||||
MathJax.typesetPromise();
|
||||
});
|
||||
/*! update cache: 20260410024918 */
|
||||
/*! update cache: 20260410223920 */
|
||||
|
||||
@@ -469,4 +469,4 @@
|
||||
|
||||
return Starfield;
|
||||
});
|
||||
/*! update cache: 20260410024918 */
|
||||
/*! update cache: 20260410223920 */
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -4437,9 +4437,8 @@
|
||||
<h2 id="343-unicode">3.4.3 Таблица символов Unicode<a class="headerlink" href="#343-unicode" title="Permanent link">¶</a></h2>
|
||||
<p>С бурным развитием компьютерной техники таблицы символов и стандарты кодирования начали стремительно множиться, и это породило множество проблем. С одной стороны, такие таблицы обычно определяли символы только для конкретных языков и не могли нормально работать в многоязычной среде. С другой стороны, для одного и того же языка существовало несколько стандартов кодирования; если две машины использовали разные стандарты, при обмене информацией возникали искажения текста.</p>
|
||||
<p>Исследователи той эпохи задумались: <strong>если создать достаточно полную таблицу символов, которая включит все языки и знаки мира, разве это не решит проблемы многоязычной среды и искаженного текста</strong>? Под влиянием этой идеи и появилась большая и всеобъемлющая таблица символов Unicode.</p>
|
||||
<p><u>Unicode</u> по-китайски называется "единый код" и теоретически способен вместить более миллиона символов. Его цель - собрать символы со всего мира в единую таблицу символов, предоставить универсальный стандарт для обработки и отображения текстов на разных языках и уменьшить количество проблем с искажением текста, вызванных различиями стандартов кодирования.</p>
|
||||
<p>С момента публикации в 1991 году Unicode непрерывно расширялся, добавляя новые языки и символы. По состоянию на сентябрь 2022 года Unicode уже включал 149186 символов, в том числе буквы разных языков, знаки, а также эмодзи. В огромной таблице символов Unicode часто используемые символы занимают 2 байта, а некоторые редкие символы - 3 байта и даже 4 байта.</p>
|
||||
<p>Unicode - это универсальный набор символов, который по сути просто присваивает каждому символу номер (так называемую "кодовую точку"), <strong>но не определяет, как именно хранить эти кодовые точки в компьютере</strong>. Тут неизбежно возникает вопрос: если в одном тексте одновременно встречаются кодовые точки Unicode разной длины, как система должна разбирать символы? Например, если дан код длиной 2 байта, как понять, является ли это одним 2-байтовым символом или двумя 1-байтовыми?</p>
|
||||
<p><u>Unicode</u> по-китайски называется "единый код" и теоретически способен вместить более миллиона символов. Его цель - собрать символы со всего мира в единую таблицу символов, предоставить универсальный стандарт для обработки и отображения текстов на разных языках и уменьшить количество проблем с искажением текста, вызванных различиями стандартов кодирования. С момента публикации в 1991 году Unicode непрерывно расширялся, добавляя новые языки и символы. По состоянию на сентябрь 2022 года Unicode уже включал 149186 символов, в том числе буквы разных языков, знаки, а также эмодзи.</p>
|
||||
<p>Как универсальный набор символов, Unicode по сути присваивает каждому символу уникальную "кодовую точку" (числовой идентификатор символа), диапазон которой составляет от U+0000 до U+10FFFF, образуя единое пространство нумерации символов. Однако <strong>Unicode не определяет, как именно хранить эти кодовые точки в компьютере</strong>. Тут неизбежно возникает вопрос: если в одном тексте одновременно встречаются кодовые точки Unicode разной длины, как система должна разбирать символы? Например, если дан код длиной 2 байта, как понять, является ли это одним 2-байтовым символом или двумя 1-байтовыми?</p>
|
||||
<p>Для этой проблемы <strong>прямолинейное решение состоит в том, чтобы хранить все символы в кодировке одинаковой длины</strong>. Как показано на рисунке 3-7, каждый символ в "Hello" занимает 1 байт, а каждый символ в "алгоритм" занимает 2 байта. Мы можем дополнить старшие биты нулями и закодировать все символы в "Hello алгоритм" в виде 2-байтовых единиц. Тогда система сможет считывать по одному символу каждые 2 байта и восстановить эту фразу.</p>
|
||||
<p><img alt="Пример кодирования Unicode" class="animation-figure" src="../character_encoding.assets/unicode_hello_algo.png" /></p>
|
||||
<p align="center"> Рисунок 3-7 Пример кодирования Unicode </p>
|
||||
|
||||
@@ -251,4 +251,4 @@
|
||||
initAutoSlide();
|
||||
}
|
||||
})();
|
||||
/*! update cache: 20260410025001 */
|
||||
/*! update cache: 20260410224004 */
|
||||
|
||||
@@ -8,4 +8,4 @@ document$.subscribe(({ body }) => {
|
||||
],
|
||||
});
|
||||
});
|
||||
/*! update cache: 20260410025001 */
|
||||
/*! update cache: 20260410224004 */
|
||||
|
||||
@@ -15,4 +15,4 @@ window.MathJax = {
|
||||
document$.subscribe(() => {
|
||||
MathJax.typesetPromise();
|
||||
});
|
||||
/*! update cache: 20260410025001 */
|
||||
/*! update cache: 20260410224004 */
|
||||
|
||||
@@ -469,4 +469,4 @@
|
||||
|
||||
return Starfield;
|
||||
});
|
||||
/*! update cache: 20260410025001 */
|
||||
/*! update cache: 20260410224004 */
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -176,4 +176,4 @@
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
}
|
||||
/*! update cache: 20260410025001 */
|
||||
/*! update cache: 20260410224004 */
|
||||
|
||||
@@ -790,4 +790,4 @@ a:hover .device-on-hover {
|
||||
flex: 1 1 30%;
|
||||
}
|
||||
}
|
||||
/*! update cache: 20260410025001 */
|
||||
/*! update cache: 20260410224004 */
|
||||
|
||||
@@ -122,4 +122,4 @@ main .gsc-loading-image {
|
||||
.gsc-reply-content::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
/*! update cache: 20260410025001 */
|
||||
/*! update cache: 20260410224004 */
|
||||
|
||||
@@ -153,4 +153,4 @@ main {
|
||||
.gsc-reply-content::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
/*! update cache: 20260410025001 */
|
||||
/*! update cache: 20260410224004 */
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -176,4 +176,4 @@
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
}
|
||||
/*! update cache: 20260410024918 */
|
||||
/*! update cache: 20260410223920 */
|
||||
|
||||
@@ -790,4 +790,4 @@ a:hover .device-on-hover {
|
||||
flex: 1 1 30%;
|
||||
}
|
||||
}
|
||||
/*! update cache: 20260410024918 */
|
||||
/*! update cache: 20260410223920 */
|
||||
|
||||
@@ -122,4 +122,4 @@ main .gsc-loading-image {
|
||||
.gsc-reply-content::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
/*! update cache: 20260410024918 */
|
||||
/*! update cache: 20260410223920 */
|
||||
|
||||
@@ -153,4 +153,4 @@ main {
|
||||
.gsc-reply-content::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
/*! update cache: 20260410024918 */
|
||||
/*! update cache: 20260410223920 */
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -4445,9 +4445,8 @@
|
||||
<h2 id="343-unicode">3.4.3 Unicode 字元集<a class="headerlink" href="#343-unicode" title="Permanent link">¶</a></h2>
|
||||
<p>隨著計算機技術的蓬勃發展,字元集與編碼標準百花齊放,而這帶來了許多問題。一方面,這些字元集一般只定義了特定語言的字元,無法在多語言環境下正常工作。另一方面,同一種語言存在多種字元集標準,如果兩臺計算機使用的是不同的編碼標準,則在資訊傳遞時就會出現亂碼。</p>
|
||||
<p>那個時代的研究人員就在想:<strong>如果推出一個足夠完整的字元集,將世界範圍內的所有語言和符號都收錄其中,不就可以解決跨語言環境和亂碼問題了嗎</strong>?在這種想法的驅動下,一個大而全的字元集 Unicode 應運而生。</p>
|
||||
<p><u>Unicode</u> 的中文名稱為“統一碼”,理論上能容納 100 多萬個字元。它致力於將全球範圍內的字元納入統一的字元集之中,提供一種通用的字元集來處理和顯示各種語言文字,減少因為編碼標準不同而產生的亂碼問題。</p>
|
||||
<p>自 1991 年釋出以來,Unicode 不斷擴充新的語言與字元。截至 2022 年 9 月,Unicode 已經包含 149186 個字元,包括各種語言的字元、符號甚至表情符號等。在龐大的 Unicode 字元集中,常用的字元佔用 2 位元組,有些生僻的字元佔用 3 位元組甚至 4 位元組。</p>
|
||||
<p>Unicode 是一種通用字元集,本質上是給每個字元分配一個編號(稱為“碼點”),<strong>但它並沒有規定在計算機中如何儲存這些字元碼點</strong>。我們不禁會問:當多種長度的 Unicode 碼點同時出現在一個文字中時,系統如何解析字元?例如給定一個長度為 2 位元組的編碼,系統如何確認它是一個 2 位元組的字元還是兩個 1 位元組的字元?</p>
|
||||
<p><u>Unicode</u> 的中文名稱為“統一碼”,理論上能容納 100 多萬個字元。它致力於將全球範圍內的字元納入統一的字元集之中,提供一種通用的字元集來處理和顯示各種語言文字,減少因為編碼標準不同而產生的亂碼問題。自 1991 年釋出以來,Unicode 不斷擴充新的語言與字元。截至 2022 年 9 月,Unicode 已經包含 149186 個字元,包括各種語言的字元、符號甚至表情符號等。</p>
|
||||
<p>Unicode 作為一種通用字元集,本質上是給每個字元分配唯一的“碼點”(字元編號),其取值範圍為 U+0000 至 U+10FFFF,構成了統一的字元編號空間。然而,<strong>Unicode 並沒有規定在計算機中如何儲存這些字元碼點</strong>。我們不禁會問:當多種長度的 Unicode 碼點同時出現在一個文字中時,系統如何解析字元?例如給定一個長度為 2 位元組的編碼,系統如何確認它是一個 2 位元組的字元還是兩個 1 位元組的字元?</p>
|
||||
<p>對於以上問題,<strong>一種直接的解決方案是將所有字元儲存為等長的編碼</strong>。如圖 3-7 所示,“Hello”中的每個字元佔用 1 位元組,“演算法”中的每個字元佔用 2 位元組。我們可以透過高位填 0 將“Hello 演算法”中的所有字元都編碼為 2 位元組長度。這樣系統就可以每隔 2 位元組解析一個字元,恢復這個短語的內容了。</p>
|
||||
<p><img alt="Unicode 編碼示例" class="animation-figure" src="../character_encoding.assets/unicode_hello_algo.png" /></p>
|
||||
<p align="center"> 圖 3-7 Unicode 編碼示例 </p>
|
||||
|
||||
@@ -251,4 +251,4 @@
|
||||
initAutoSlide();
|
||||
}
|
||||
})();
|
||||
/*! update cache: 20260410024928 */
|
||||
/*! update cache: 20260410223931 */
|
||||
|
||||
@@ -8,4 +8,4 @@ document$.subscribe(({ body }) => {
|
||||
],
|
||||
});
|
||||
});
|
||||
/*! update cache: 20260410024928 */
|
||||
/*! update cache: 20260410223931 */
|
||||
|
||||
@@ -15,4 +15,4 @@ window.MathJax = {
|
||||
document$.subscribe(() => {
|
||||
MathJax.typesetPromise();
|
||||
});
|
||||
/*! update cache: 20260410024928 */
|
||||
/*! update cache: 20260410223931 */
|
||||
|
||||
@@ -469,4 +469,4 @@
|
||||
|
||||
return Starfield;
|
||||
});
|
||||
/*! update cache: 20260410024928 */
|
||||
/*! update cache: 20260410223931 */
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -176,4 +176,4 @@
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
}
|
||||
/*! update cache: 20260410024928 */
|
||||
/*! update cache: 20260410223931 */
|
||||
|
||||
@@ -790,4 +790,4 @@ a:hover .device-on-hover {
|
||||
flex: 1 1 30%;
|
||||
}
|
||||
}
|
||||
/*! update cache: 20260410024928 */
|
||||
/*! update cache: 20260410223931 */
|
||||
|
||||
@@ -122,4 +122,4 @@ main .gsc-loading-image {
|
||||
.gsc-reply-content::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
/*! update cache: 20260410024928 */
|
||||
/*! update cache: 20260410223931 */
|
||||
|
||||
@@ -153,4 +153,4 @@ main {
|
||||
.gsc-reply-content::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
/*! update cache: 20260410024928 */
|
||||
/*! update cache: 20260410223931 */
|
||||
|
||||
Reference in New Issue
Block a user