友人が*
という文字を含む Slack チャットルームにコマンドを貼り付けました。これは通常の*
のように見えますが、そうではありません:
$ uniprops '*'
uniprops: no character named ‹*›
一方、マシンで入力するときに表示されるアスタリスクでuniprops
を実行すると、次のようになります。
$ uniprops '*'
U+002A ‹*› \N{ASTERISK}
\pP \p{Po}
All Any ASCII Assigned Basic_Latin Punct Is_Punctuation Common Zyyy Po P
Gr_Base Grapheme_Base Graph X_POSIX_Graph GrBase Other_Punctuation
Pat_Syn Pattern_Syntax PatSyn POSIX_Graph POSIX_Print POSIX_Punct Print
X_POSIX_Print Punctuation Unicode X_POSIX_Punct
od
を介して渡すことで、実際のアスタリスクではないこともわかります。
$ printf '*' | od -c
0000000 * 342 200 213
0000004
通常のものは与えるが:
$ printf '*' | od -c
0000000 *
0000001
これが少し大きな謎のキャラクターです:
そして通常のアスタリスク(そうです、それらはまったく同じに見えます):
したがって、uniprops
はこれが何であるかを認識しておらず、 http://www.fileformat.info/ でも見つかりません。私はそれを貼り付けた友人がOS X(私はLinuxを使っています)上にあり、通常のアスタリスクとして彼らのシステム上で動作することを知っています。 Slackが何らかの形で変更したと思います。それで、誰かがそのキャラクターが何であるかについて何か知っていますか?
奇妙なキャラクターを質問から直接コピーすることはできません。どうやら、Stack Exchangeエンジンは末尾の非印刷文字を取り除きます。 「編集」リンクをクリックして、代わりにそこからコピーします。
uniprops
は、Unicode::Tussle
Perlモジュールに含まれているきちんとした小さなスクリプトで、指定した文字に関する情報を識別して出力します。
貼り付けは、完全に通常のアスタリスクであるアスタリスクが原因ではなく、 nicode文字U + 200B が原因で失敗しました。キャラクターはZERO WIDTH SPACE
なので、コピーしても表示されません。
Pythonコードを使用:
stro=u"'*'?"
def uniconv(text):
return " ".join(hex(ord(char)) for char in text)
uniconv(stro)
関数uniconv
は、入力文字列(この場合はu"'*'?"
)を16進形式の対応するUnicodeコードページに変換します。文字列のu
接頭辞は、文字列をUnicode文字列として識別します。
私は出力を得ることができました:
0x27 0x2a 0x200b 0x27 0x3f
0x27
、0x2a
、および0x3f
は、それぞれ文字'
、*
および?
のASCII/Unicode 16進値であることが明確にわかります。 。これで0x200b
が残り、文字が識別されます。
Pythonコードを本文に貼り付けると、SEのMarkdownソフトウェアによってU + 200B文字が削除されたことに注意してください。期待される結果を得るには、タイトルから直接コピーする必要があります。編集ビューを使用します。
Ask Ubuntuチャットルームの@Rinzwindの助けを借りて、問題はまったくキャラクターではないことがわかりました。 od
の出力に注意してください。
$ printf '*' | od -c
0000000 * 342 200 213
0000004
342 200 213
は別の文字の8進数表現であり、 this site を使用して検索できます。
Character
Character name ZERO WIDTH SPACE
Hex code point 200B
Decimal code point 8203
Hex UTF-8 bytes E2 80 8B
Octal UTF-8 bytes 342 200 213
UTF-8 bytes as Latin-1 characters bytes â <80> <8B>
だから、私が実際に持っていたのは、2つのユニコード文字、通常の*
およびゼロ幅のスペース。