関数の署名は です。エンコードでエンコードされた文字列を含むバイナリ、またはエンコードでの文字 (コード ポイント) とバイナリの詳細なリストのいずれかunicode:characters_to_list(Data, InEncoding)
であると想定されます。Unicode 文字のリストを返します。erlang の文字は整数です。Data
InEncoding
InEncoding
あなたが呼び出すunicode:characters_to_list(<<208,144,208,145,208,146>>, utf8)
かunicode:characters_to_list([1040,1041,1042], utf8)
、Unicode文字列を正しくデコードすると(はい、整数のリストである限り、2番目はnoopですData
)。しかし、unicode:characters_to_list([208,144,208,145,208,146], utf8)
erlang を呼び出すと、utf8
エンコーディングで 6 文字のリストが渡されたと認識されます。これはすでに Unicode であるため、出力はまったく同じになります。
erlang には型はありませんが、それが受け入れられ、正しく動作するとbyte
仮定します。unicode:characters_to_list/2
list of bytes
要約すると。erlang で文字列を表現するには、ビット文字列と文字のリストの 2 つの通常の方法があります。エンコーディングでこれらの表現のいずれか (またはそれらの組み合わせ) のunicode:characters_to_list(Data, InEncoding)
文字列を取得し、それを Unicode コードポイントのリストに変換します。Data
InEncoding
例のようなリストがある場合は[208,144,208,145,208,146]
、それをバイナリに変換してからerlang:list_to_binary/1
に渡すことができます。unicode:characters_to_list/2
1> unicode:characters_to_list(list_to_binary([208,144,208,145,208,146]), utf8).
[1040,1041,1042]
unicode
モジュールは unicode と latin-1 のみをサポートします。したがって、(関数は unicode または latin-1 のコードポイントを予期するため)characters_to_list
コードポイントのフラット リストの場合、リストで何もする必要はありません。ただし、リストが深い場合があります ( unicode:characters_to_list([[1040],1041,<<1042/utf8>>]).
)。Data
これが、引数のリスト データ型をサポートする理由です。