2016-12-27 108 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以上的代碼點。

binary_to_atom(二進制,UTF8)

如果二進制包含Unicode編碼點> 255在將來的版本失敗,例如Unicode字符可被允許和binary_to_atom(二進制,UTF8)並然後不會失敗。

Source

["刺繡等等我": "2"]語法相當於[{:erlang.binary_to_atom("刺繡等等我"), "2"}]即它的所有按鍵轉換成原子和您所使用的文本包含超過255

由於select碼點支持任何枚舉國債收益率2 item元組,可以使用更長的表示法構造兩個元素元組元組列表:

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

謝謝@Dog伯特的答案!我現在要看看源代碼。 – Ilya