Mahesh@Dev Ответов: 1

Я хочу получить код строки UTF-16BE в ASP.NET MVC


эта функция не работает properly.it должно быть возвращено "092F09420928093F0915094B0921", но возвращено снова.

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

public ActionResult encode()
        {
            string myString = "यूनिकोड ";
            string result = "";
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(myString);
            result = System.Text.Encoding.UTF8.GetString(bytes);
            return Content(result);
        }

1 Ответов

Рейтинг:
11

Jochen Arndt

Если вы хотите UTF-16BE, вы должны использовать Кодирование.Свойство BigEndianUnicode (System. Text)[^]. Для преобразования используйте Кодирование.Метод Convert (Кодировка, Кодирование, Байт[]) (Система.Текст)[^].

// EDIT: Changed to use TF-8 and added output for console application

string myString = "यूनिकोड ";
// Use UTF-8 if the source string is UTF-8 encoded
byte [] input = System.Text.Encoding.UTF8.GetBytes(myString);
byte [] result = System.Text.Encoding.Convert(Encoding.UTF8, Encoding.BigEndianUnicode, input);
// Use Unicode if the source string is UTF-16LE encoded (the default Windows encoding)
//byte [] input = System.Text.Encoding.Unicode.GetBytes(myString);
//byte [] result = System.Text.Encoding.Convert(Encoding.Unicode, Encoding.BigEndianUnicode, input);

foreach (var utf16BEbyte in result)
    Console.Write("{0:X2} ", utf16BEbyte);
Console.WriteLine();
Console.ReadKey();

Выход:
09 2F 09 42 09 28 09 3F 09 15 09 4B 09 21 00 20


Mahesh@Dev

Привет Йохен,
помогите мне получить окончательную строку, как я уже упоминал в своем вопросе.
кодированный результат myString - > 092F 0942 0928 093F 0915 094B 0921 0020
свяжись со мной по этому поводу ... пожалуйста
Заранее спасибо

Jochen Arndt

Смотрите мой обновленный ответ.

Mahesh@Dev

Спасибо но мне нужно еще немного для тебя
Здесь вы используете консоль.писать()
но я должен вернуть строковый вывод из функции.

Jochen Arndt

Я использовал WriteLine (), чтобы показать, что результат соответствует ожидаемому.
У вас есть массив байтов, содержащий строку в кодировке UTF-16BE.
Просто верни это.
Я не знаю, что вы хотите сделать с результатом. Но я думаю, что байтовый массив был бы полезен.

Mahesh@Dev

Мне нужен вывод в переменной строкового типа.Так что я могу сохранить его в базе данных.

Jochen Arndt

Строки .NET внутренне всегда кодируются UTF-16LE. Таким образом, вы не можете хранить строку UTF-16BE в объекте .NET string.

Как передать большую конечную строку в вашу базу данных, зависит от используемого интерфейса. Возможно, используемый интерфейс выполняет внутреннее преобразование, чтобы вы могли передать объект .NET string.

При использовании записи потока просто используйте массив байтов.

Но то, что вы хотите его для передачи в базу данных, не было упомянуто в вашем вопросе.

Mahesh@Dev

Так что теперь я хочу хранить их в базе данных.
пожалуйста, сделай так ... как я хочу.

Jochen Arndt

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

Mahesh@Dev

в противном случае вы можете сохранить результат в переменной строкового типа.