0

Joel の Unicode に関する記事を読んだ後でも、自分の Unicode の知識についてまだ確信が持てません。具体的には、次の質問が残っています。

コードポイントが大きすぎて一部のエンコーディング (ASCII) に収まらない文字列があるとします。たとえば、次のようになります。

U+67CF U+1AAB U+ABCD U+7034

するとジョエルはこう言います。

表現しようとしているエンコーディングで、表現しようとしている Unicode コード ポイントに相当するものがない場合は、通常、小さな疑問符が表示されます。または、あなたが本当に上手なら、箱。

しかし、この文字列は (2 進/16 進レベルで) ASCII でエンコードされたもの、またはサイズが不十分な他のエンコードでどのように見えるでしょうか?

4

2 に答える 2

2

引用されたステートメントはあまり意味がありません。エンコーディングにUnicodeコードポイントのコードがない場合、そのコードポイントを表すことはできません。それでおしまい。たとえば、ASCIIで「é」を表すことはできません。

おそらく、このステートメントは、文字列をあるエンコーディングから別のエンコーディングに変換しようとして、文字列内の一部の文字がターゲットエンコーディングで表現されていない場合、奇妙な文字が表示される可能性があることを意味します。ええ、はい、でもあなたは他のものも見ることができました。変換プログラムは、「é」を「e」にマップするか、エラーメッセージを発行して、適切な出力の生成を拒否する可能性があります。通常、後者が正しい動きです。

しかし、変換がその場で行われ、人間の相互作用に巻き込まれることができないが、何かをしなければならない状況があります。もちろん、それはもはや文字コード変換ではなく、より広い意味での変換です。また、文字を削除したり、ロジックによって表現可能な文字や文字の組み合わせにマッピングしたり、ターゲットエンコーディングを変更したりするなど、さまざまな戦略を適用できます。

于 2012-09-14T16:26:16.777 に答える
2

「ユニコード」などの文字列を ASCII に変換すると、これらの文字を表すことができる ASCII で定義されたコードはありません。そのときに何をすべきかは、完全に変換ソフトウェア次第です。通常、ソフトウェアはエンコードできない文字を「?」、つまり文字通り ASCII の疑問符文字に置き換えます。文字列は、通常の ASCII 疑問符文字を含む通常の ASCII 文字列です。

Joel の記事のより詳細なフォローアップとして、テキストを操作するためのエンコーディングと文字セットについて、すべてのプログラマーが絶対に、積極的に知る必要があることを参照してください。

于 2012-09-14T16:20:10.150 に答える