Member 10518995 Ответов: 3

Преобразование из Unicode в оригинальном формате с#


Я хочу конвертировать из Unicode в его оригинальный формат UTF8, я думаю, и это может быть арабский язык, как показано ниже. Пользователь вводит текст в юникоде и когда он нажимает кнопку Конвертировать он будет преобразован в исходный формат как показано ниже :

string unicode ="\u0633\u0637\u0648\u0631 \u0639\u0628\u0631 \u0627\u0644\u0623\u064a\u0627\u0645 1";


выходные данные должны соответствовать исходному формату:

سطور عبر الأيام 1 | شمس الدين خ

я использовал http://msdn.microsoft.com/en-us/library/vstudio/kdcak6ye%28v=vs.100%29.aspx[^]

как ссылка на меня, но выход такой же, как и вход, ничего не произошло, никакого преобразования не произошло, Может ли кто-нибудь посоветовать мне, что не так?

Что я уже пробовал:

private void btn_convert_Click(object sender, EventArgs e)
        {
            string unicodestring = txt_unicode.Text;
            
            // Create two different encodings.
            Encoding ascii = Encoding.ASCII;
            Encoding unicode = Encoding.Unicode;
            //Encoding Utf8 = Encoding.UTF8;

     // // Convert the string into a byte array.
            byte[] unicodeBytes = unicode.GetBytes(unicodestring);

     // // Perform the conversion from one encoding to the other.
      byte[] ascibytes = Encoding.Convert(unicode,ascii,unicodeBytes);

     // // Convert the new byte[] into a char[] and then into a string.
      char[] asciiChars = new char[ascii.GetCharCount(ascibytes, 0, ascibytes.Length)];
      ascii.GetChars(ascibytes, 0, ascibytes.Length, asciiChars, 0);
     string asciiString = new string(asciiChars);

     // // Display the strings created before and after the conversion.
     //MessageBox.Show("Original string is"+unicodeString);
     MessageBox.Show("Ascii converted string is" + asciiString);
}

Richard MacCutchan

Вы не можете использовать GetBytes для строки в этой форме. Вы должны сначала преобразовать все escape-последовательности в их числовые значения, чтобы сделать "реальную" строку Unicode.

PIEBALDconsult

Я не понимаю, в чем тут дело. Зачем вообще нужна конверсия? Когда я подключаю это утверждение к VS, я получаю:
سطور عبر الأيام 1

3 Ответов

Рейтинг:
2

Amir No-Family

Просто использовать:

var output = System.Net.WebUtility.HtmlDecode(text);


Maciej Los

4 года слишком поздно!

Amir No-Family

лучше поздно, чем никогда!

Рейтинг:
0

Ahmad Haghighi

Вы можете использовать эту функцию:

System.Uri.UnescapeDataString(string)


Я проверяю это для вас:

string unicode = "\u0633\u0637\u0648\u0631 \u0639\u0628\u0631 \u0627\u0644\u0623\u064a\u0627\u0645 1";
            string str = System.Uri.UnescapeDataString(unicode);


результат (ул содержание) есть:
سطور عبر الأيام 1


Akhand Jyoti

Эй, я пробовал этот код работать для этого конкретного Юникода srting.
У меня есть строка unicode, например.
строка str="~\0\u0016?\0\u0013?\0AT??\\?\u0001#yfgyhvkh#?";
после выполнения описанной выше операции я не получаю преобразованную строку .пожалуйста, помогите мне .Заранее большое вам спасибо.
Я должен получить такие данные, как:
7E 00 15 90 00 13 A2 00 41 54 EC 8E 5C 9F 01 23 31 32 23 31 32 23 52 23 0B

Рейтинг:
0

Member 10518995

Наконец я получаю решение, если кому-то нужна какая-то ссылка

private string convert_from_unicode(string str,char c)

{

    string rtstr = "";
    for (int i=2;i< str.Length; i+=6)
    {
            string str1 = str.Substring(i, 4);
            c = (char)Int16.Parse(str1, System.Globalization.NumberStyles.HexNumber);
            rtstr += c;
     }
    return rtstr;

}
private void btn_convert_Click(object sender, EventArgs e)
{

    char f = ' ';

    txt_result.Text = convert_from_unicode(txt_unicode.Text, f);

  }