Рейтинг:
1
Jochen Arndt
.Net использует кодировку UTF-16. Вы должны конвертировать только при наличии данных или передаче данных с использованием других кодировок.
Смотреть также Кодировка символов в .NET | Microsoft Docs[^].
В текстовых файлах используемая кодировка может быть обозначена символом Знак порядка байтов - Википедия[^] (обязательно для UTF-16, необязательно - но рекомендуется - для UTF-8) и заголовками, когда файл предназначен для определенного протокола, такого как HTML или XML.
Для веб-серверов и приложений также часто существуют параметры конфигурации для кодировки по умолчанию (например, элемент "глобализация" | Microsoft Docs[^]).
[РЕДАКТИРОВАТЬ]
Настоящий вопрос был найден.
Цитата:
я хочу отобразить строковые данные в формате unicode, например, если мое имя "Шахбаз" находится в строковом формате, а преобразование его в unicode-это
ОТ U+0053 ОТ U+0068 ОТ U+0061 U В+0068 ОТ U+0062 ОТ U+0061 U В+007А
Вам просто нужно создать строку, используя этот формат, повторяя символы входной строки:
// Using a StringBuilder is more efficient than appending to a string
StringBuilder sb = new StringBuilder(input.Length * 7);
// Iterate over the characters of the input string
foreach (char c in input)
{
// Append the character code
sb.AppendFormat("U+{0:X4} ", c);
}
// Create final output string
string output = sb.ToString();
[/РЕДАКТИРОВАТЬ]
Eric Lynch
Чтобы (надеюсь) добавить немного к ответу Йохена, строка C# всегда хранится в памяти как UTF-16. Есть два распространенных случая, когда вам нужно беспокоиться о кодировке: 1) Вы читаете или пишете файл или 2) Вы имеете дело с некоторыми non-.NET сущность (через взаимодействие). Для этих случаев ознакомьтесь с предлагаемыми ссылками.
Еще одна проблема может быть связана с пользовательским интерфейсом. Там вам нужно убедиться, что вы выбрали шрифт, содержащий глифы для символов, которые вы ожидаете отобразить. Хотя это проблема презентации, а не кодирования. Обычно шрифты MS по умолчанию довольно приличны для букв на большинстве языков...в меньшей степени это касается символов.
Member 10230348
но мой вопрос заключается в том как преобразовать строку в utf 16 можете ли вы предоставить мне код на c#
Jochen Arndt
Если у вас есть строка C#, она уже кодируется UTF-16, потому что это кодировка, используемая внутри .Net.
Member 10230348
но мне нужно, чтобы строка была u0012, как этот формат
Jochen Arndt
Компьютер хранит двоичную информацию. То, как интерпретируются данные, определяется форматами данных.
В строке C# символы хранятся в виде 16-битных значений ushort в соответствии со стандартом UTF-16, а общий выходной формат-это печать соответствующих символов.
Если вам нужен другой формат вывода или ввода, вы должны использовать соответствующие функции или методы.
Обозначение "uXXXX" -это не что иное, как буква "u", за которой следует 16-битное шестнадцатеричное значение, представляющее один символ. Другие обозначения-это соответствующие числовые значения 0x0012 (шестнадцатеричное) и 18 (десятичное).
Если вам нужно сопоставить символ типа 'u0012' со строкой, вы должны использовать метод, поддерживаемый компилятором, например
string test = "\x12";
Member 10230348
может ли u plz предоставить мне код для преобразования строки в Юникод asp.net с#
Jochen Arndt
Какая струна?
Опять же: строка .Net-это Unicode!
Или у вас есть какая-то "экранированная" строка (которая является Unicode), но вы хотите "unesacpe" ее?
Затем приведите пример строки, чтобы мы знали, какой вид "экранирования" используется. Но с такими уже должны справиться ASP.Net
Member 10230348
12345 это моя строка я хочу преобразовать эту строку в Юникод
Jochen Arndt
Что такое тип данных из этой "струны"?
Это литеральная строка "12345"?
Является ли это (десятичным) буквальным числом, таким как int?
Является ли это содержанием переменной (какого типа)?
Member 10230348
nvarchar - это тип данных этой строки
Jochen Arndt
NVARCHAR-это тип данных SQL, который не известен в файле .Net.
Однако, если вы используете какой-то интерфейс базы данных, он будет выполнять преобразование в/из строки.
Member 10230348
я получаю значение из базы данных в этой строке и хочу преобразовать это значение в Юникод
Jochen Arndt
Если вы получаете его из базы данных в виде строки C#, то это уже Unicode (потому что это тип строки C#). Интерфейс базы данных выполняет преобразования, когда это необходимо и возможно (что здесь не обязательно, потому что NVARCHAR также является Unicode; по крайней мере, С MS SQL server).
Всех этих обсуждений можно было бы избежать, если бы вы просто показали фрагмент кода, где вы извлекаете данные из базы данных, и правильное описание проблемы (если есть какая-либо проблема).
Member 10230348
в соответствии с руководством ur код c# в юникоде, но я хочу отобразить строковые данные в формате Юникода, например, у меня есть мое имя "Шахбаз" в строковом формате, и преобразовать его в Юникод-это
ОТ U+0053 ОТ U+0068 ОТ U+0061 U В+0068 ОТ U+0062 ОТ U+0061 U В+007А
вышеописанный формат я хочу хочу плз помогите мне сэр
Jochen Arndt
Это проблема отображения данных.
Я добавлю его к своему решению.
Member 10230348
я знаю но мне нужен этот код для преобразования строки в unicode и отображения данных в формате unicode plz помогите мне сэр plz plz
Jochen Arndt
Я обновил свое решение.
Но это не называется "обращением". Это называется форматированием строк.
Правильный вопрос был бы:
"Как отформатировать / создать строку, показывающую кодовые точки Юникода данной строки"
вместе с вашим вышеприведенным примером.
Eric Lynch
Извините, Йохен, мы написали примерно одно и то же в одно и то же время. Объединив наш код, мы получим идеальное решение. Мой код изначально недооценивает строитель (должен быть таким же.Длина * 7) и Ваш будет иметь дополнительное пространство в конце текста :) Хотя, ваше проще понять.
Jochen Arndt
Без проблем. Нить все равно довольно длинная ;)
Я думал о том, чтобы справиться с дополнительным пространством, но оно также присутствует в строке примера, и я решил оставить его в качестве упражнения.
Eric Lynch
Это то, что вы ищете?
строка же = "Шахбаз";
var builder = new StringBuilder(то же самое.Длина * 5);
foreach (char chr in same)
{
если (строитель.Длина > 0)
строитель.Добавлять(' ');
строитель.AppendFormat("U+{0:X4}", (ushort)chr);
}
string текст = построитель.Метод toString();
Приставка.WriteLine(текст);
Чтобы быть ясным, на консоль будет выведен следующий текст:
ОТ U+0053 ОТ U+0068 ОТ U+0061 U В+0068 ОТ U+0062 ОТ U+0061 U В+007А
Member 10230348
спасибо вам сэр
Member 10230348
спасибо вам сэр
Eric Lynch
Используя Ваш пример, следующий код никогда не будет отображать слово "нет". Вещи действительно всегда находятся в UTF-16 в строках C#.
ushort[] codepoints = new ushort[] { 0x53, 0x68, 0x61, 0x68, 0x62, 0x61, 0x7A };
строка utf16 = "\u0053\u0068\u0061\u0068\u0062\u0061\u007A";
строка же = "Шахбаз";
Приставка.WriteLine(utf16 == то же самое ? "Да" : "Нет");
for (int index = 0; index < utf16.Длина; индекс++)
если (формате UTF16[индекс] != же, [индекс] || формате UTF16[индекс] != коды[индекс])
Приставка.WriteLine("Нет");
Итак, опять же, если у вас есть строка, вы по определению имеете что-то в UTF-16.
Что касается базы данных, то nvarchar хранит представление Unicode в любой кодировке, которую он выбирает, вы не можете выбрать. В случае SQL Server это также UTF-16. Если вы не уверены, смотрите следующее:
https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-2017
Теперь, что касается преобразования из строки C# (всегда UTF-16) в собственную кодировку базы данных (вплоть до продукта базы данных), то это обрабатывается (автоматически) программным обеспечением, которое не находится под вашим контролем. Обычно, с помощью C#, какая-то технология сидит на вершине провайдера и вызывает его от вашего имени. Это может быть ADO.NET, LINQ to SQL, Entity Framework или Entity Framework Core.
Надеюсь, это поможет вам понять, почему ваш вопрос, как он был сформулирован, не имеет смысла. Я понимаю, что это может сбить с толку, но и Йохен, и я предоставляем Вам точную информацию. В этом случае у вас просто нет работы, чтобы do...so мы не можем предоставить вам код для этого :)