Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/55: Рейтинг темы: голосов - 55, средняя оценка - 4.82
Заблокирован

Чем отличается Encoding.Unicode от Encoding.UTF16

29.10.2015, 08:58. Показов 11483. Ответов 15

Студворк — интернет-сервис помощи студентам
я вот что то не пойму чем отличается Encoding.Unicode от Encoding.UTF16? и почему в браузерах используется UTF8 хотя там юникод вроде бы... юникод он же 2х байтный, значит UTF16 это и есть юникод разве нет? и еще такой вопрос у меня есть файл в кодировке ANSI, как мне его сделать в кодировке юникод?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2015, 08:58
Ответы с готовыми решениями:

Какую кодировку получаем от преобразования Encoding.Unicode.GetBytes(data)
Коллеги, помогите, кто чем может, сами мы не местные... Есть некоторый клиент, написанный на C#, который делает вот такое...

Encoding - Число байт больше чем символов в строке
Доброй ночи! В строке s у меня различные странные символы ,например Ü номер которого 220 в таблице юникод, остальные даже скопировать не...

Ошибка с Encoding.RegisterProvider
Всем привет) Ребят ошибка выходит , как быть? Проект прикреплён, Заранее спасибо) ...

15
1 / 1 / 3
Регистрация: 26.10.2015
Сообщений: 25
29.10.2015, 11:10
Цитата Сообщение от Volrajas Посмотреть сообщение
у меня есть файл в кодировке ANSI, как мне его сделать в кодировке юникод?
Для смены кодировки используйте текстовый редактор.
Например в стандартном блокноте - Файл - Сохранить как, и внизу диалога сохранения есть выпадающий список с типами кодировки.

Добавлено через 3 минуты
Цитата Сообщение от Volrajas Посмотреть сообщение
чем отличается Encoding.Unicode от Encoding.UTF16
Есть замечательный сайт MSDN. Если поискать там класс Encoding, то можно найти там описание его свойств и методов.

Добавлено через 3 минуты
А еще здесь есть табличка, которая должна тебе помочь
0
[Bicycle Reinventor]
 Аватар для Exerion
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
29.10.2015, 11:15
Encoding.Unicode - это UTF-16 little endian.
Сравнительные таблицы юникодов можно посмотреть на вики.
0
Заблокирован
29.10.2015, 11:27  [ТС]
Цитата Сообщение от veselchack Посмотреть сообщение
Для смены кодировки используйте текстовый редактор.
Например в стандартном блокноте - Файл - Сохранить как, и внизу диалога сохранения есть выпадающий список с типами кодировки.
нет мне надо чтоб моя программа сама меняла кодировку файла
Цитата Сообщение от veselchack Посмотреть сообщение
Есть замечательный сайт MSDN. Если поискать там класс Encoding, то можно найти там описание его свойств и методов.
"Получает кодировку для формата UTF-16 с прямым порядком байтов." то бишь это эквивалент UTF-16 или все таки есть отличия?
Цитата Сообщение от veselchack Посмотреть сообщение
А еще здесь есть табличка, которая должна тебе помочь
тут не указан Encoding.Unicode
Цитата Сообщение от Exerion Посмотреть сообщение
Encoding.Unicode - это UTF-16 little endian.
я не знаю что такое little endian, так разница какая то между ними есть?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
29.10.2015, 11:36
Volrajas, юникод это многобайтовая кодировка в рамках которой определены схемы кодирования (UTF8, UTF16, UTF32 и т.д.) которые описывают как именно символ из таблицы Unicode (т.н. code point) будет представлен в виде байтов. Например:
Символ Code point UTF8 UTF16 UTF32
Z \u005A 0x5A 0x5A 0x00 0x5A 0x00 0x00 0x00
Й \u0419 0xD0 0x99 0x19 0x04 0x19 0x04 0x00 0x00
\u307D 0xE3 0x81 0xBD 0x7D 0x30 0x7D 0x30 0x00 0x00
Из этой таблицы видно что Unicode не вляется двухбайтовой кодировкой. Кол-во байтов зависит от символа и используемой схемы кодирования. В среднем UTF8 тратит меньше байтов чем остальные схемы. Поэтому её и любят использовать по умолчанию.

Цитата Сообщение от Volrajas Посмотреть сообщение
я вот что то не пойму чем отличается Encoding.Unicode от Encoding.UTF16?
У класса Encoding нет свойства UTF16. Свойство Encoding.Unicode соответствует UTF16 с little endian порядком байтов. Также есть свойство BigEndianUnicode которое соотствует big endian варианту UTF16.

Цитата Сообщение от Volrajas Посмотреть сообщение
и почему в браузерах используется UTF8 хотя там юникод вроде бы...
Это не совсем так. Браузер отображает страницу в той кодировке которая указана на странице. Это может быть любая кодировка. Не только UTF8. Если кодировка не указана, то браузер может выбрать кодировку UTF8 по умолчанию или попытаться угадать её.

Цитата Сообщение от Volrajas Посмотреть сообщение
и еще такой вопрос у меня есть файл в кодировке ANSI, как мне его сделать в кодировке юникод?
В Windows под ANSI кодировкой понимается кодировка соответствующая текущим региональным настройкам. Получить её можно через свойство Encoding.Default. Перекодировку можно сделать так:
C#
1
2
3
4
// Читаем текст из файла в кодировке ANSI
string s = File.ReadAllText("c:\path\to\file.txt", Encoding.Default);
// Записываем текст в файла в кодировке UTF8
File.WriteAllText("c:\path\to\file.txt", s);
1
1 / 1 / 3
Регистрация: 26.10.2015
Сообщений: 25
29.10.2015, 11:37
Volrajas, Вы, конечно, извините...но Вас в гугле забанили?
Цитата Сообщение от Volrajas Посмотреть сообщение
я не знаю что такое little endian
Порядок байтов - wiki
Поиском по форуму тоже не пользовались?
0
Заблокирован
29.10.2015, 12:28  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
юникод это многобайтовая кодировка в рамках которой определены схемы кодирования (UTF8, UTF16, UTF32 и т.д.) которые описывают как именно символ из таблицы Unicode (т.н. code point) будет представлен в виде байтов.
теперь стало понятнее
Цитата Сообщение от OwenGlendower Посмотреть сообщение
У класса Encoding нет свойства UTF16. Свойство Encoding.Unicode соответствует UTF16 с little endian порядком байтов. Также есть свойство BigEndianUnicode которое соотствует big endian варианту UTF16.
вот теперь реально понятно все стало
Цитата Сообщение от OwenGlendower Посмотреть сообщение
В Windows под ANSI кодировкой понимается кодировка соответствующая текущим региональным настройкам. Получить её можно через свойство Encoding.Default. Перекодировку можно сделать так:
а можно как то узнать в какой кодировке был файл? вдруг он не в Default, а скажем BigIndian...

Добавлено через 9 минут
вот я нашел у конструктора StreamReader-а такой параметр detectEncodingFromByteOrderMarks, но он че то не всегда верно определяет... щас вот пытаюсь им загрузить файл в кодировке ASCII, а он считает что это кодировка UTF8...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
29.10.2015, 12:36
Цитата Сообщение от Volrajas Посмотреть сообщение
а можно как то узнать в какой кодировке был файл?
Можно, но этот процесс не является 100% надежным. Смотри ответ в этой теме. Там определение сделано для текста веб страницы, но идея применима для любого текста.

Цитата Сообщение от Volrajas Посмотреть сообщение
вдруг он не в Default, а скажем BigIndian...
Не путай теплое с мягким. Кодировка это одно, а эндианность совсем другое. И пишется это через E (endian), а не I (Indian). С индейцам это никак не связано

Цитата Сообщение от Volrajas Посмотреть сообщение
вот я нашел у конструктора StreamReader-а такой параметр detectEncodingFromByteOrderMarks
Это работает только для кодировок семейства Unicode при наличии специальной метки BOM (byte order mark). Это режим используется по умолчанию так что указывать явно его не нужно.
0
Заблокирован
29.10.2015, 12:43  [ТС]
нагуглил еще вот такую шнягу
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static Encoding GetFileEncoding(string srcFile)
{
    // *** Use Default of Encoding.Default (Ansi CodePage)
    Encoding enc = Encoding.Default;
 
    // *** Detect byte order mark if any - otherwise assume default
    byte[] buffer = new byte[5];
    FileStream file = new FileStream(srcFile, FileMode.Open);
    file.Read(buffer, 0, 5);
    file.Close();
 
    if (buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf)
        enc = Encoding.UTF8;
    else if (buffer[0] == 0xfe && buffer[1] == 0xff)
        enc = Encoding.Unicode;
    else if (buffer[0] == 0 && buffer[1] == 0 && buffer[2] == 0xfe && buffer[3] == 0xff)
        enc = Encoding.UTF32;
    else if (buffer[0] == 0x2b && buffer[1] == 0x2f && buffer[2] == 0x76)
        enc = Encoding.UTF7;
 
    return enc;
}
вроде бы правильно определяет...

Добавлено через 5 минут
Цитата Сообщение от Volrajas Посмотреть сообщение
вроде бы правильно определяет...
хотя нет нефига не правильно, StreamReader все время считал кодировку UTF8, а этот наоборот все время возвращает ASCII
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
29.10.2015, 15:11
Volrajas, данный код может определить только кодировки семейства Unicode при условии наличия BOM. Плюс в коде есть ошибка при определении UTF16. В комментариях к статье есть исправление. Я бы использовал библиотеку UDE.CSharp.
0
Заблокирован
10.11.2015, 20:18  [ТС]
а какая кодировка у символов в строках C#? Unicode / UTF16? просто во всяких примерах в интернете по перекодировке строк c# в массив байтов почему то как правило используется UTF8, но я вроде как всю жизнь был уверен что в C# 2х байтные символы... разве нет?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
10.11.2015, 20:23
Volrajas, string хранится в памяти в кодировке UTF-16. Это было сделано для совместимости с Windows API. Кодировка UTF-8 встречается довольно часто потому что она в среднем более компактная чем UTF-16.
0
Заблокирован
10.11.2015, 20:26  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Кодировка UTF-8 встречается довольно часто потому что она в среднем более компактная чем UTF-16.
погодите опять вы меня запутали, что значит частая? как она может быть частой если используется в c# только utf16??? или они комбинируются чтоли как то???
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
10.11.2015, 20:30
Volrajas, я отвечал на два твоих вопроса. Надо было их разделить на разные абзацы чтобы не было путаницы.

В памяти строки всегда хранятся в кодировке UTF-16, но при работе с файлами по умолчанию используется кодировка UTF-8. XML документы также по умолчанию создаются в этой кодировке. При работе с HTTP тоже по умолчанию подразумеватся кодировка UTF-8. Все это я и имел в виду когда говорил что "UTF-8 часто встречается".
0
Заблокирован
10.11.2015, 20:33  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
XML документы также по умолчанию создаются в этой кодировке. При работе с HTTP тоже по умолчанию подразумеватся кодировка UTF-8.
так у них же есть возможность в коде задать кодировку вроде как...
XML
1
<?xml version="1.0" encoding="UTF-16"?>
оно в этом случае автоматически считается в utf16 или надо еще как то это указать в коде c#?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
10.11.2015, 20:37
Цитата Сообщение от Volrajas Посмотреть сообщение
Цитата Сообщение от OwenGlendower Посмотреть сообщение
XML документы также по умолчанию создаются в этой кодировке.
так у них же есть возможность в коде задать кодировку вроде как...
То есть фразу "по умолчанию" ты не заметил? Возможность указать кодировку есть, но если её не указывать, то подразумевается UTF-8.

Добавлено через 1 минуту
Цитата Сообщение от Volrajas Посмотреть сообщение
оно в этом случае автоматически считается в utf16 или надо еще как то это указать в коде c#?
Считается. XML парсер об этом позаботится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.11.2015, 20:37
Помогаю со студенческими работами здесь

Encoding: перекодировка русских букв
Доброго времени суток! Есть кусок кода string welcome = &quot;Привет Welcome&quot;; data = Encoding.GetEncoding(1251).GetBytes(welcome); ...

Перевод кодировки символов (Encoding)
Привет всем. В общем, такая проблема Была проблема в программе с кириллицей, с не читаемой ее кодировкой Код у них в общем...

Как работать с классом Encoding
Написал в блокноте тесты(test.cmd). Знаю, что в командной сторкое кирилица автоматически из аски конвертируется в ютф16, а на выход обратно...

Операция обратная Encoding.GetBytes()
string str = &quot;21&quot;; byte send2 = Encoding.ASCII.GetBytes(str); Console.Write(send2); Выводит &quot;49&quot;. Как из этого обратно получить...

Encoding(28595) - строка почему-то не преобразуется
Приветствую! Есть строка &gt;?;0G5=&gt; в онлайне декодере она преобразуется к ОПЛАЧЕНО через 28595 кодировку, а как исходную показывает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru