Если ваши потребности просты, вы можете сделать это с помощью карты по символам в строке.
quote($<) -> "<";
quote($>) -> ">";
quote($&) -> "&";
quote($") -> """;
quote(C) -> C.
Тогда ты бы сделал
1> Raw = "string & \"stuff\" <".
2> Quoted = lists:map(fun quote/1, Raw).
Но Quoted
не будет простым списком, что все равно хорошо, если вы собираетесь отправить его в файл или в качестве ответа http. Т.е. см. io-списки Erlang.
В более поздних выпусках Erlang теперь есть функции кодирования-декодирования для многобайтовых форматов utf8 в представления широких байтов / кодовых точек, см. модуль юникода erlang.
Переформатированные комментарии, чтобы выделить примеры кода:
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 для символа евро (десятичное число 8364) будет единственным элементом в вашем списке. Итак, вы бы просто сделали это:
xmlencode([8364|T], Acc) -> xmlencode(T, Acc ++ "€");
person
Christian
schedule
26.07.2010