4
Jan 2012
WP7 Extended ASCII Characters
If you want to display a Greek string that you receive from the Web but all you get are characters like %32, %B6 etc you can do the following
Add this class to your project:
using System;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Xml.Linq;
namespace AiaWp7.UI {
public static class EncoderHelper {
private static readonly XElement _document = null;
static EncoderHelper() {
string path = "Resources/EncodingMap.xml";
Uri uri = new Uri(path, UriKind.Relative);
_document = XDocument.Load(Application.GetResourceStream(uri).Stream).Root;
}
public static string Decode(string input) {
if(string.IsNullOrEmpty(input))
return input;
StringBuilder sb = new StringBuilder();
input = input.Replace("%28", "(");
input = input.Replace("%29", ")");
input = input.Replace("+", "%+");
var chars = input.Split(new[] { '%' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var c in chars) {
var element = _document.Descendants("Char").FirstOrDefault(x => {
var xAttribute = x.Attribute("Encoded");
return xAttribute != null && xAttribute.Value == c.Trim(new[] { ' ', '.' });
});
if (element == null) {
sb.Append(c);
continue;
}
var attribute = element.Attribute("Value");
if (attribute != null) sb.Append(c.Replace(c.Trim(), attribute.Value));
}
return sb.Replace("+", " ").ToString();
}
}
}
Add this file to your Resources folder named EncodedMap.xml (If you don’t have one, create)
<?xml version="1.0" encoding="utf-8" ?>
<Encodings>
<Char Encoded="B6" Value="Α" />
<Char Encoded="B8" Value="Ε" />
<Char Encoded="B9" Value="Η" />
<Char Encoded="BA" Value="Ι" />
<Char Encoded="BC" Value="Ο" />
<Char Encoded="BE" Value="Υ" />
<Char Encoded="BF" Value="Ω" />
<Char Encoded="C1" Value="Α" />
<Char Encoded="C2" Value="Β" />
<Char Encoded="C3" Value="Γ" />
<Char Encoded="C4" Value="Δ" />
<Char Encoded="C5" Value="Ε" />
<Char Encoded="C6" Value="Ζ" />
<Char Encoded="C7" Value="Η" />
<Char Encoded="C8" Value="Θ" />
<Char Encoded="C9" Value="Ι" />
<Char Encoded="CA" Value="Κ" />
<Char Encoded="CB" Value="Λ" />
<Char Encoded="CC" Value="Μ" />
<Char Encoded="CD" Value="Ν" />
<Char Encoded="CE" Value="Ξ" />
<Char Encoded="CF" Value="Ο" />
<Char Encoded="D0" Value="Π" />
<Char Encoded="D1" Value="Ρ" />
<Char Encoded="D3" Value="Σ" />
<Char Encoded="D4" Value="Τ" />
<Char Encoded="D5" Value="Υ" />
<Char Encoded="D6" Value="Φ" />
<Char Encoded="D7" Value="Χ" />
<Char Encoded="D8" Value="Ψ" />
<Char Encoded="D9" Value="Ω" />
<Char Encoded="DA" Value="Ϊ" />
<Char Encoded="DB" Value="Ϋ" />
<Char Encoded="DC" Value="ά" />
<Char Encoded="DD" Value="έ" />
<Char Encoded="DE" Value="ή" />
<Char Encoded="DF" Value="ί" />
<Char Encoded="E1" Value="α" />
<Char Encoded="E2" Value="β" />
<Char Encoded="E3" Value="γ" />
<Char Encoded="E4" Value="δ" />
<Char Encoded="E5" Value="ε" />
<Char Encoded="E6" Value="ζ" />
<Char Encoded="E7" Value="η" />
<Char Encoded="E8" Value="θ" />
<Char Encoded="E9" Value="ι" />
<Char Encoded="EA" Value="κ" />
<Char Encoded="EB" Value="λ" />
<Char Encoded="EC" Value="μ" />
<Char Encoded="ED" Value="ν" />
<Char Encoded="EE" Value="ξ" />
<Char Encoded="EF" Value="ο" />
<Char Encoded="F0" Value="π" />
<Char Encoded="F1" Value="ρ" />
<Char Encoded="F2" Value="ς" />
<Char Encoded="F3" Value="σ" />
<Char Encoded="F4" Value="τ" />
<Char Encoded="F5" Value="υ" />
<Char Encoded="F6" Value="φ" />
<Char Encoded="F7" Value="χ" />
<Char Encoded="F8" Value="ψ" />
<Char Encoded="F9" Value="ω" />
<Char Encoded="FA" Value="ϊ" />
<Char Encoded="FB" Value="ϋ" />
<Char Encoded="FC" Value="ό" />
<Char Encoded="FD" Value="ύ" />
<Char Encoded="FE" Value="ώ" />
<Char Encoded="2F" Value="/" />
<Char Encoded="30" Value="0" />
<Char Encoded="31" Value="1" />
<Char Encoded="32" Value="2" />
<Char Encoded="33" Value="3" />
<Char Encoded="34" Value="4" />
<Char Encoded="35" Value="5" />
<Char Encoded="36" Value="6" />
<Char Encoded="37" Value="7" />
<Char Encoded="38" Value="8" />
<Char Encoded="39" Value="9" />
<Char Encoded="28" Value="(" />
<Char Encoded="29" Value=")" />
<Char Encoded="+" Value=" " />
</Encodings>
And you are all set!