powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Из UTF-8 в ucs-2 big endian
3 сообщений из 3, страница 1 из 1
Из UTF-8 в ucs-2 big endian
    #39241685
D_A_S1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, пожалуйста, как можно перекодировать файл из utf-8 в кодировку ucs-2 big endian? Заранее спасибо!
...
Рейтинг: 0 / 0
Из UTF-8 в ucs-2 big endian
    #39241909
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конкретно с ucs-2 не доводилось иметь дело, но вообще в помощь класс Encoding . Создаёте экземпляры обеих кодировок, в исходной делаете GetBytes, в конечной - GetString с полученным массивом байт.
...
Рейтинг: 0 / 0
Из UTF-8 в ucs-2 big endian
    #39242825
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_A_S1, если файл небольшой, то можно прочитать целиком и также записать
Код: c#
1.
2.
string path = "file.txt";
File.WriteAllText(path, File.ReadAllText(path, Encoding.UTF8), Encoding.BigEndianUnicode);


Если данных много, то тогда можно перекодировать частями:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
using (var srcReader = new StreamReader("input.txt", Encoding.UTF8))
using (var dstStream = File.Create("output.txt"))
{
    byte[] preamble = Encoding.BigEndianUnicode.GetPreamble();
    dstStream.Write(preamble, 0, preamble.Length);
    
    var encoder = Encoding.BigEndianUnicode.GetEncoder();

    const int BLOCK_SIZE = 1000;
    char[] chars = new char[BLOCK_SIZE];
    byte[] tempBuf = new byte[chars.Length*2];
    while(true)
    {
        int charsRead = srcReader.ReadBlock(chars, 0, chars.Length);
        if (charsRead == 0) break;
        
        int byteCount = encoder.GetByteCount(chars, 0, charsRead, true);
        if (byteCount > tempBuf.Length) Array.Resize(ref tempBuf, byteCount);
        
        int charsUsed, bytesUsed; bool completed;
        encoder.Convert(chars, 0, charsRead, tempBuf, 0, tempBuf.Length, true, out charsUsed, out bytesUsed, out completed);
        Debug.Assert(completed);
        
        dstStream.Write(tempBuf, 0, byteCount);
    }
}
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Из UTF-8 в ucs-2 big endian
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]