5

私は Unicode データ文字を扱っていますが、一部の文字が unicodedata に名前がないのはなぜでしょうか? 確認できるサンプルコードは次のとおりです。< unknown >

ユニコードデータベース内のすべての文字に名前が付けられていると思いましたが、ところで、同じカテゴリのすべてがあります[Cc] Other, Control.

別の質問: どうすれば Unicode コード ポイントの値を取得できますか? それord(unicodechar)はトリックを行いますか?

また、ファイルをここに置きます(エンコーディングは奇妙なことなので)。これは、「見えない」文字を使用したカット アンド ペーストが失われる可能性があるためです。

#!/bin/env python
# -*- coding: utf-8 -*-

#extracted and licensing from here:
"""
:author: Laurent Pointal <laurent.pointal@limsi.fr> <laurent.pointal@laposte.net>
:organization: CNRS - LIMSI
:copyright: CNRS - 2004-2009
:license: GNU-GPL Version 3 or greater
:version: $Id$
"""

# Chars alonemarks:
#         !?¿;,*¤@°:%|¦/()[]{}<>«»´`¨&~=#±£¥$©®"
# must have spaces around them to make them tokens.
# Notes: they may be in pchar or fchar too, to identify punctuation after
#        a fchar.
#        \202 is a special ,
#        \226 \227 are special -
alonemarks = u"!?¿;,\202*¤@°:%|¦/()[\]{}<>«»´`¨&~=#±\226"+\
     u"\227£¥$©®\""
import unicodedata
for x in alonemarks:
    unicodename = unicodedata.name(x, '<unknown>')
    print "\t".join(map(unicode, (x, len(x), ord(x), unicodename, unicodedata.category(x))))

    # unichr(int('fd9b', 16)).encode('utf-8')
    # http://stackoverflow.com/questions/867866/convert-unicode-codepoint-to-utf8-hex-in-python    
4

2 に答える 2

3

ユニコードデータベース内のすべての文字に名前が付けられていると思いました

いいえ、制御文字には名前がありません。UnicodeDataファイルを参照してください

別の質問: どうすれば Unicode コード ポイントの値を取得できますか? トリックを行うのは ord(unicodechar) ですか?

はい!

print '%x' % ord(unicodedata.lookup('LATIN LETTER SMALL CAPITAL Z'))
## 1d22
于 2012-04-27T10:09:55.063 に答える
2

unicodedataライブラリのドキュメントに従って、

モジュールは、UnicodeData File Format 5.2.0 で定義されているものと同じ名前と記号を使用します (こちらを参照) 。

あなたの 2 つのキャラクターは、次の出力を表示します。

1   150 <unknown>   Cc
1   151 <unknown>   Cc

これらは、制御点文字 0x96 および 0x97 に対応します。上記の Unicode ドキュメントでは、コード ポイントの段落で次のように規定されています。

サロゲート コード ポイント、私用文字、制御コード、非文字、および割り当てられていないコード ポイントには名前がありません。

モジュールを介して Unicode コメントに対応するラベル コメントを取得する方法がわかりませんがunicodedata、2 つの制御文字の名前は Unicode 規格でそのように定義されているため、取得できないと思います。

于 2012-04-27T10:24:41.270 に答える