Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Как записать в файл символ в UTF-16 из терминала? |
Философия, технологии, алгоритмы! |
|
Опции темы |
11.07.2006, 14:18 | #1 |
Форумец
Сообщений: 1,453
Регистрация: 22.12.2005
Не в сети |
Как записать в файл символ в UTF-16 из терминала?
Hi, folks!
Подскажите пожалуйста, как записать в начало файла символ в UTF-16 из терминала (UNIX). Возможно ли такое вообще? Сам терминал поддерживает UTF-8 и, естественно, отобразить его не сможет, это понятно. Надо только вставить. У меня он разваливается на 2 отдельных байта и текстовый редактор его потом неверно кажет. Help me, plz! |
18.07.2006, 08:49 | #2 |
Форумец
Сообщений: 142
Регистрация: 17.12.2002
Возраст: 43
Не в сети |
Незнаю, усть ли в юниксе такие функции, но может сработать:
#include <stdio.h> #include <io.h> void main(void) { FILE *pfile; pfile = fopen("1.txt","a+b"); fprintf(pfile,"%c%c",0x02,0x56); fclose(pfile); return ; } Во вопросу UTF-16 и состоит из 2-х байт. Все верно. В продолжение есть ещё бесплатная библиотека iconv от Gnome для перевода из различных типов кодировок в необходимую. Она кроссплатформенная. Вот ссылочка http://xmlsoft.org/html/libxml-encoding.html |
24.07.2006, 19:53 | #3 |
Форумец
Сообщений: 1,453
Регистрация: 22.12.2005
Не в сети |
Kent, спасибо, но синтаксис в Вашем рецепте совсем незнакомый. А вот с ним у меня и затык.
Про двубайтовость UTF-16 - в курсе. И про то, что в начало надо согласно стандарту юникода BOM (byte order mark) поставить (в моем случае <FEFF>), чтоб текствые редакторы понимали, что перед ними кириллица и отображали ее символами из соответсвующей таблицы юникода тоже в курсе. iconv - очень люблю ) Но мне хочется непримнно переконвертить, а потом порезать текст. В этом случае BOM будет лишь в начале первого куска. Вот и сижу репу чешу… |
25.07.2006, 10:54 | #4 |
Форумец
Сообщений: 142
Регистрация: 17.12.2002
Возраст: 43
Не в сети |
#include <iostream> //Помоему здесь хранятся обьявления
void new_file(char *filename) ( FILE *pfile; pfile = fopen(filename,"w+b");//создаем файл(если уже есть то очищаем) для записи и чтения в бинарном режиме fprintf(pfile,"%c%c",0x02,0x56);//0x02 и 0x56 коды символов в 16-ти ричной (можно и в десятичной) записываем в файл fclose(pfile);//закрываем поток return ; ) Функцию я тебе для создания файла с первыми забитыми битами уже написал. Как дописать в файл я думаю сообразишь. fprintf(pfile,"%c%c",0x02,0x56); - здесь я записал в файл 2 байта fprintf(pfile,"%c%c%с%с",12,1,253,152); - здесь я записал в файл уже 4 байта в 10-ой системе. Изменишь по своему усмотрению. |