chr
恐ろしいことに、ユニコードでは機能しないことがわかりましたが、何かは機能します。マニュアルページはほとんど明確です
文字セット内のその NUMBER で表される文字を返します。たとえば、chr(65)" は ASCII または Unicode の「A」であり、chr(0x263a) は Unicode スマイリー フェイスです。
実際、私はスマイリーを使用して印刷できます
perl -e 'print chr(0x263a)'
しかし、chr(0x00C0)
うまくいきません。私の perl v5.10.1 は少し古いようですが、ソース コードにさまざまな奇妙な文字を貼り付けると、すべて問題ありません。
use utf8
とのような面白いことを試しましたが、私のバージョンでは機能しないなどの面白いことは試していません。use encoding 'utf8'
デコードするバイト配列がないため、デコードする必要がないことを確認するために で遊んでいました。以前よりもはるかに多くのドキュメントを読み、かなりの数の興味深いものを見つけましたが、役に立ちませんでした。一種のUnicode バグのように見えますが、使用可能な解決策はありません。さらに、文字列のセマンティクス全体は気にしません。必要なのは単純な関数だけです。use v5.12
use feature 'unicode_strings'
Encode::decode
では、たとえばreal_chr(0xC0) eq 'À'
保持されるように、数値をそれに対応する単一の文字からなる文字列に変換するにはどうすればよいでしょうか?
私が得た最初の答えは、IOに関するすべてを説明していますが、その理由はまだわかりません
#!/usr/bin/perl -w
use strict;
use utf8;
use encoding 'utf8';
print chr(0x00C0) eq 'À' ? 'eq1' : 'ne1', " - ", chr(0x263a) eq '☺' ? 'eq1' : 'ne1', "\n";
print 'À' =~ /\w/ ? "match1" : "no_match1", " - ", chr(0x00C0) =~ /\w/ ? "match2" : "no_match2", "\n";
版画
ne1 - eq1
match1 - no_match2
これは、手動で入力された'À'
が と異なることを意味しchr(0x00C0)
ます。さらに、前者は単語の構成文字であり (正しい!)、後者はそうではありません (ただし、そうあるべきです!)。