2016-12-27 8 views
1

私はエリクシール/フェニックスbinary_to_atom

<%= select f, :user_id, ["刺繡等等我": "2", "wow": "3"] %>

フォーム私は英語のみの言語を使用する場合、それは完璧に動作しています。しかし、中国語、またはその他の返品エラー

** (ArgumentError) argument error 
:erlang.binary_to_atom("刺繡等等我", :utf8) 
(elixir) src/elixir_parser.yrl:512: :elixir_parser.yeccpars2_93/7 

私はそれがエンコーディングを行うと信じています。文字列を受け入れ可能な形式に変換するにはどうすればよいですか?

ありがとうございます!

答えて

5

現在のErlang(19)のバージョンでは、255以上のコードポイントを含むことはできません。

バイナリは、将来のリリースではUnicodeのコードポイント> 255が含まれている場合

が失敗したbinary_to_atom(バイナリ、UTF8)、などのUnicode文字を許可することができ、binary_to_atom(バイナリ、UTF8)を失敗しません。それは原子にすべてのキーを変換し、使用しているテキストがselect以来255

上のコードポイントを含むすべての列挙をサポートしています。すなわち

Source

["刺繡等等我": "2"]構文は[{:erlang.binary_to_atom("刺繡等等我"), "2"}]と同等であること利回り2項目タプルの場合、長い表記を使用して2つの要素タプルのリストを作成できます。

+0

ありがとうございました@Dog答えのためのバート!私はソースを見てみましょう。 – Ilya