ニーズが単純な場合は、文字列内の文字のマップを使用してこれを行うことができます。
quote($<) -> "<";
quote($>) -> ">";
quote($&) -> "&";
quote($") -> """;
quote(C) -> C.
それならあなたはするだろう
1> Raw = "string & \"stuff\" <".
2> Quoted = lists:map(fun quote/1, Raw).
ただしQuoted
、ファイルに送信する場合や http 応答として送信する場合は、フラットなリストではありません。つまり、Erlang の io-lists を参照してください。
最近の Erlang リリースでは、マルチバイト utf8 からワイドバイト/コードポイント表現へのエンコード/デコード関数が追加されました。 erlang unicode モジュールを参照してください。
コード例を際立たせるために、再フォーマットされたコメント:
ettore : マルチバイト文字をサポートする必要がありますが、それは私がやっていることのようなものです。これが私のコードです:
xmlencode([], Acc) -> Acc;
xmlencode([$<|T], Acc) -> xmlencode(T, Acc ++ "<"); % euro symbol
xmlencode([226,130,172|T], Acc) -> xmlencode(T, Acc ++ "€");
xmlencode([OneChar|T], Acc) -> xmlencode(T, lists:flatten([Acc,OneChar])).
できれば車輪の再発明はしたくありませんが。
dsmith : 使用している文字列は、通常、Unicode コード ポイントのリスト (つまり、数字のリスト) であるため、特定のバイト エンコーディングは関係ありません。バイナリを直接操作している場合は、特定のエンコーディングについてのみ心配する必要があります。
明確にするために、ユーロ記号の Unicode コードポイント (10 進数 8364) は、リスト内の単一の要素になります。したがって、これを行うだけです:
xmlencode([8364|T], Acc) -> xmlencode(T, Acc ++ "€");