関数の署名は です。エンコードでエンコードされた文字列を含むバイナリ、またはエンコードでの文字 (コード ポイント) とバイナリの詳細なリストのいずれかunicode:characters_to_list(Data, InEncoding)であると想定されます。Unicode 文字のリストを返します。erlang の文字は整数です。DataInEncodingInEncoding
あなたが呼び出す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/2list of bytes
要約すると。erlang で文字列を表現するには、ビット文字列と文字のリストの 2 つの通常の方法があります。エンコーディングでこれらの表現のいずれか (またはそれらの組み合わせ) のunicode:characters_to_list(Data, InEncoding)文字列を取得し、それを Unicode コードポイントのリストに変換します。DataInEncoding
例のようなリストがある場合は[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これが、引数のリスト データ型をサポートする理由です。