U + xxxxxエンコーディングで指定された式をutf-8に変換するには?

U + xxxxxエンコーディングで指定された式をutf-8に変換するには?

絵文字はU + xxxxx形式を使用して指定されているようです。
ここで、各xは16進数です。

例えば、U+1F615~である公式Unicodeコンソーシアムコード「慌てる顔」について

答え1

UTF-8可変長ですコーディングUnicode。これはASCIIの上位セットとして設計されています。バラよりウィキペディアエンコーディングの詳細。またはエンコードさ\x00 \x01 \xF6 \x15れます。UCS-4BEUTF-32BE

UnicodeコードポイントでUTF-8エンコーディングを取得するには、ロケールの文字マップがUTF-8であるとし(出力を参照locale charmap)、次のようにします。

$ printf '\U1F615\n'

答え2

UTF-32(ビッグエンディアン)からUTF-8に変換する方法は次のとおりです。

$ confused=$(echo -ne "\x0\x01\xF6\x15" | iconv -f UTF-32BE -t UTF-8)     
$ echo $confused 

答え3

頭の中や紙でできる良い方法:

  1. どのくらいのバイトがあるかを計算します。 U+0080 の下の値は 1 バイト、U+0800 の下の値は 2 バイト、U+10000 の下の値は 3 バイト、それ以外の場合は 4 バイトです。あなたの例では4バイトです。

  2. 16進数を8進数に変換する:0373025

  3. 最後から始めて一度に2つの8進数を削除すると、一連の8進値が生成されます037 030 025

  4. 8進値が予想バイト数より小さい場合は、先頭に0を追加します000 037 030 025

  5. 最初を除くすべての項目に0200get: を追加します000 0237 0230 0225

  6. 最初の項目に0300予想される長さが2の場合、03403の場合、03604の場合を追加して、次のようになります360 0237 0230 0225

これで、8進エスケープ文字列で書かれています\360\237\230\225。必要に応じて16進数に変換するオプションがあります。

関連情報