web-dev-qa-db-ja.com

Unicodeの印刷可能な文字の範囲はどのくらいですか?

Unicodeの印刷可能な文字の範囲を教えてください。 [例えば。 ASCIIで印刷可能な文字の範囲は\ u0020-\ u007fです]

49

参照してください http://en.wikipedia.org/wiki/Unicode_control_characters

特にC0およびC1の制御文字を確認したい場合があります http://en.wikipedia.org/wiki/C0_and_C1_control_codes

ウィキによれば、C0制御文字はU + 0000〜U + 001FおよびU + 007F(ASCIIと同じ範囲)の範囲にあり、C1制御文字はU + 0080〜U + 009Fの範囲にあります。

unicodeには、C制御文字の他に、何百ものフォーマット制御文字があります。ゼロ幅の非結合子。これにより、文字間隔が狭くなるか、双方向のテキストコントロールになります。このフォーマット制御文字はかなり分散しています。

さらに重要なのは、Unicodeの印刷できない文字を知る必要があるために何をしているのですか?おそらく、あなたがしようとしていることはすべて、問題を解決するための間違ったアプローチです。

18
Lie Ryan

まず、質問からWord 'UTF8'を削除する必要があります。これは適切ではありません(UTF8は、Unicodeのエンコーディングの1つにすぎず、質問に対して直角なものです)。

第二に、「印刷可能/印刷不可能」の意味は、Unicodeではあまり明確ではありません。たぶん、 " graphical character "を意味します。スペースが印刷可能/グラフィックである場合、異議を唱えることもできます。非グラフィック文字は、基本的に、制御文字で構成されます:範囲0x00-0x0fと散在するその他の文字。

とにかく、Unicode文字の大部分(200.000以上)は「グラフィカル」です。しかし、これは確かにそれらが環境で印刷可能であることを意味するものではありません。

「ランダムに印刷可能な」ユニコード文字列を生成する場合、すべての「印刷可能な」文字を含めようとするのは悪い考えです。

13
leonbloy

これは古い質問ですが、それでも有効であり、既存の回答でカバーされている以上に、便利な、しかし簡潔に言えば、この件について述べたいと思います。

Unicode

Unicodeは 文字のプロパティ を定義します。

これらのプロパティの1つは、主要なクラスとサブクラスを持つ「一般カテゴリ」です。主なクラスは、レター、マーク、句読点、記号、区切り文字、その他です。

あなたのキャラクターの特性を知ることによって、あなたがそれらを印刷可能であるとみなすかどうかを決定することができますあなたの特定のコンテキストで

「文字」や「印刷可能」などの用語は難しいことが多く、興味深いEdgeケースがあることを常に覚えておく必要があります。


プログラミング言語のサポート

一部のプログラミング言語はこの問題を支援します。

たとえば、Go言語には「Unicode」パッケージがあり、次の2つを含む多くの便利なUnicode関連の機能を提供しています。

func IsGraphic(r rune) bool

IsGraphic reports whether the rune is defined as a Graphic by Unicode. Such  
characters include letters, marks, numbers, punctuation, symbols, and spaces, 
from categories L, M, N, P, S, Zs. 

func IsPrint(r rune) bool

IsPrint reports whether the rune is defined as printable by Go. Such  
characters include letters, marks, numbers, punctuation, symbols, and  
the ASCII space character, from categories L, M, N, P, S and the ASCII  
space character. This categorization is the same as IsGraphic except  
that the only spacing character is ASCII space, U+0020.

「Unicodeで印刷可能と定義されている」ではなく、「Goで印刷可能と定義されている」と表示されていることに注意してください。それはまるで、Unicodeのウィザードがあえて垂直でないいくつかの深さがあるかのようです。


印刷可能

Unicodeについて学べば学ぶほど、予想外に多様で、不可解なほど奇妙な人間の書記体系がいかに理解されているかがわかります。

特に、特定の「文字」が印刷可能であるかどうかは、必ずしも明白ではありません。

ゼロ幅のスペースは印刷可能ですか?ハイフネーションポイントはいつ印刷できますか?印刷可能性がWord内での位置や隣接する文字に依存する文字はありますか?結合文字は常に印刷可能ですか?


脚注

ASCIIの印刷可能な文字の範囲は\ u0020-\ u007f

いいえ、そうではありません。\u007fはDELであり、通常は印刷可能な文字とは見なされません。たとえば、「DEL」というラベルの付いたキーボードキーに関連付けられており、その最も初期の目的は、ある媒体(ディスプレイ、ファイルなど)からの文字の削除を命令することでした。

実際、多くの8ビット文字セットには、印刷できない連続しない範囲が多数あります。たとえば、C0およびC1コントロールを参照してください。

6
RedGrittyBrick

フォントを選択し、フォントに定義されたグリフを持つUnicode文字のリストを生成する必要があります。 freetypeなどのフォントライブラリを使用して、グリフをテストできます(FT_Get_Char_Index(...)のテスト!= 0)。

3
jkl