user4393725
user4393725

Reputation:

convert a string from ISO-8859-5 to UTF8

I'm writing an application for windows mobile. I use a scan, i get a string encoding ISO-8859-5.How do I convert a string in UTF8?

Here is my code

var str_source = "³¿±2";
        Console.WriteLine(str_source);
        Encoding iso = Encoding.GetEncoding("iso-8859-5");
        Encoding utf8 = Encoding.UTF32;
        byte[] utfBytes = utf8.GetBytes(str_source);
        byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
        var str_result = iso.GetString(isoBytes, 0, isoBytes.Length);
        Console.WriteLine(str_result);

Upvotes: 1

Views: 2584

Answers (1)

John
John

Reputation: 3702

You should never start off your testing code with using string literals when dealing with encoding issues. Always use bytes to start with.

        Encoding iso = Encoding.GetEncoding("iso-8859-5");
        Encoding utf = Encoding.UTF8;

        var isoBytes = new byte[] { 228, 232 }; // фш
        // iso to utf8
        var utfBytes = Encoding.Convert(iso, utf, isoBytes);
        // utf8 to iso
        var isoBytes2 = Encoding.Convert(utf, iso, utfBytes);

        // get all strings (with the correct encoding)
        // all 3 strings will contain фш
        string s1 = iso.GetString(isoBytes);
        string s2 = utf.GetString(utfBytes);
        string s3 = iso.GetString(isoBytes2);

Edit: If you do want to use string literals to get you started, then you can use the code below to change their encoding (Encoding.Unicode) to the expected 'incoming text' encoding:

        string stringLiteral = "фш";
        Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding("iso-8859-5"),
           Encoding.Unicode.GetBytes(stringLiteral)); // { 228, 232 }

Upvotes: 3

Related Questions