8

TomCは、途中でUnicode文字を分解し、途中で再構成することをお勧めします(http://www.perl.com/pub/2012/04/perl-unicode-cookbook-always-decompose-and-recompose.html)。

前者は私には完全に理にかなっていますが、なぜ彼が途中で再構成することを勧めているのかわかりません。テキストがヨーロッパのアクセント付き文字で重い場合は、スペースを少し節約できる可能性がありますが、それを他の誰かの分解関数にプッシュしているだけです。

私が行方不明になっている他の明白な理由はありますか?

4

5 に答える 5

5

ヴェンタツさんがコメントで書いているように、合成文字は扱えるが分解文字は扱えないソフトがあります。逆も理論的には可能ですが、実際に見たことはなく、まれだと思います。

分解された文字を表示するだけの場合、レンダリング ソフトウェアは分音記号の組み合わせを処理する必要があります。フォントでそれらを見つけるだけでは十分ではありません。レンダラーは、基本文字の寸法に関する情報を使用して、分音記号を適切に配置する必要があります。これにはしばしば問題があり、レンダリングが不十分になります。特に、レンダリングで別のフォントの分音記号が使用されている場合は! その結果は、タイポグラファーがデザインした「é」のような構成済みの文字のグリフを表示するだけで得られるものよりも優れているとは言えません。

(レンダリング ソフトウェアは、状況を分析し、分解された文字を合成済みの文字に効果的にマッピングすることもできます。ただし、追加のコードが必要になります。)

于 2012-04-04T16:35:54.253 に答える
2

非常に単純です。ほとんどのツールは、Unicode のサポートが制限されています。文字は NFC 形式であると想定しています。

たとえば、これは人々が文字列を比較する一般的な方法です。

perl -CSDA -e"use utf8; if ($ARGV[0] eq "Éric") { ... }"

そしてもちろん、"É" は NFC 形式なので (ほとんどすべてのものはそれを生成するため)、このプログラムは NFC 形式の引数のみを受け入れます。

于 2012-04-04T16:30:31.150 に答える
0

エンド ユーザーは 1 つの表示文字が複数ではなく 1 文字であることを期待するため、テキスト エディターのようなものがより単純になります。また、分解された文字を「単一」の文字として扱わないシステムの問題も防ぎます。

それ以外には特にメリットはないと思います。

于 2012-04-04T15:01:48.090 に答える
0

すべてのデータが同じ正規化を持つように、1 つの正規化形式を使用する必要があります。

他の誰かの分解については、自分が出力したものには厳密でありたいが、受け入れるものには寛容であることを忘れないでください。:)

于 2012-04-04T16:54:08.320 に答える
-3

Tom Christiansen は StackOverflow に積極的に参加しており、多くの Perl に関する質問に答えています。彼がこの質問に答える可能性は十分にあります。

などの特定の文字シーケンスffは、UTF-8 で 2 つの Unicode 文字ff、または 1 つの Unicode 文字 ( ff) として表すことができます。文字を分解ffすると、並べ替えに重要な 2 つの別々の文字になるようなものを作成します。f並べ替えるときに、これを 2 つの別々の文字にする必要があります。

fUTF-8とを再構成fすると、単一の UTF-8 文字に戻ります。これは、表示 (適切に書式設定する必要があります) と編集 (単一の文字として編集する必要があります) に重要です。

残念ながら、私の理論はスペイン語の ñ のようなもので崩壊します。これは U+00F1 として 1 つの文字として表され、U+006E (n) と U+0303 (インプレース ~) に分解されます。Perl には、このタイプの 2 つの UTF-8 分解文字表現を処理するロジックが組み込まれている可能性があります。

于 2012-04-04T16:36:47.113 に答える