यदि आपकी ज़रूरतें सरल हैं, तो आप स्ट्रिंग में वर्णों पर एक मानचित्र के साथ ऐसा कर सकते हैं।
quote($<) -> "<";
quote($>) -> ">";
quote($&) -> "&";
quote($") -> """;
quote(C) -> C.
तो फिर तुम कर
1> Raw = "string & \"stuff\" <".
2> Quoted = lists:map(fun quote/1, Raw).
लेकिन Quoted
एक फ्लैट सूची है, जो अभी भी ठीक है अगर आप एक फाइल करने के लिए या एक http उत्तर के रूप में इसे भेजने के लिए जा रहे हैं नहीं होगा होगा। अर्थात। Erlang की आईओ-सूचियां देखें।
हाल ही में एर्लांग रिलीज में, अब multibyte utf8 के लिए एन्कोड-डीकोड फ़ंक्शन विस्तृत-बाइट/कोडपॉइंट प्रस्तुतियों के लिए हैं, erlang unicode module देखें।
पुन: स्वरूपित टिप्पणी, कोड उदाहरण बनाने के लिए बाहर खड़े:
Ettore: यह, मैं क्या कर रहा हूँ की तरह है, हालांकि मैं multibyte वर्णों का समर्थन करते की क्या ज़रूरत है। यहां मेरा कोड है:
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: जो स्ट्रिंग आप उपयोग कर रहे हैं वह आम तौर पर यूनिकोड कोड-पॉइंट्स (यानी संख्याओं की एक सूची) की एक सूची होगी, और इसलिए कोई भी बाइट एन्कोडिंग अप्रासंगिक है। यदि आप सीधे बाइनरी के साथ काम कर रहे हैं तो आपको केवल विशिष्ट एन्कोडिंग के बारे में चिंता की आवश्यकता होगी।
स्पष्टीकरण के लिए, यूरो प्रतीक (दशमलव 8364) के लिए यूनिकोड कोड-पॉइंट आपकी सूची में एक ही तत्व होगा। तो तुम सिर्फ इस करना होगा:
xmlencode([8364|T], Acc) -> xmlencode(T, AcC++ "€");
बस यह सुनिश्चित करने के लिए कि आप यह जानते हैं: यूआरएल एन्कोडिंग! = एक्सएमएल एन्कोडिंग – ZeissS