2016-12-27 4 views
1

Ich habe ein FormularElixir/Phoenix binary_to_atom

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

Wenn ich nur Englisch Sprache verwenden, es funktioniert perfekt. Aber chinesisch, oder jede andere Rückkehr Fehler

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

Ich glaube, es hat mit der Codierung zu tun. Wie kann ich die Zeichenfolge in das akzeptable Format konvertieren?

Vielen Dank im Voraus!

Antwort

5

Atome können ab der aktuellen Version von Erlang (19) keine Codepunkte über 255 enthalten.

binary_to_atom (Binary, UTF-8)

schlägt fehl, wenn die binäre Unicode-Codepoints enthält> 255 In einer zukünftigen Version, wie Unicode-Zeichen kann erlaubt und binary_to_atom wird (Binary, UTF-8) wird dann nicht aufhöre.

Source

["刺繡等等我": "2"] Die Syntax entspricht [{:erlang.binary_to_atom("刺繡等等我"), "2"}] dh alle Schlüssel an Atome konvertiert und der Text Sie enthält 255 Codepunkte über

Da select Verwendung unterstützt jede enumerable dass Ausbeuten 2 item Tupel, können Sie die Liste von zwei Element Tupel von Strings mit der längeren Notation zu konstruieren:

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

Vielen Dank @Dog bert für die Antwort! Ich werde mir jetzt die Quelle ansehen. – Ilya