Старый 11.07.2006, 14:18   #1   
Форумец
 
Сообщений: 1,453
Регистрация: 22.12.2005

distantX вне форума Не в сети
Question Как записать в файл символ в UTF-16 из терминала?

Hi, folks!
Подскажите пожалуйста, как записать в начало файла символ в UTF-16 из терминала (UNIX). Возможно ли такое вообще? Сам терминал поддерживает UTF-8 и, естественно, отобразить его не сможет, это понятно. Надо только вставить.

У меня он разваливается на 2 отдельных байта и текстовый редактор его потом неверно кажет.

Help me, plz!
  Ответить с цитированием
Старый 18.07.2006, 08:49   #2   
Форумец
 
Аватар для Kent
 
Сообщений: 142
Регистрация: 17.12.2002
Возраст: 43

Kent вне форума Не в сети
Незнаю, усть ли в юниксе такие функции, но может сработать:

#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

distantX вне форума Не в сети
Kent, спасибо, но синтаксис в Вашем рецепте совсем незнакомый. А вот с ним у меня и затык.

Про двубайтовость UTF-16 - в курсе. И про то, что в начало надо согласно стандарту юникода BOM (byte order mark) поставить (в моем случае <FEFF>), чтоб текствые редакторы понимали, что перед ними кириллица и отображали ее символами из соответсвующей таблицы юникода тоже в курсе.
iconv - очень люблю )
Но мне хочется непримнно переконвертить, а потом порезать текст. В этом случае BOM будет лишь в начале первого куска. Вот и сижу репу чешу…
  Ответить с цитированием
Старый 25.07.2006, 10:54   #4   
Форумец
 
Аватар для Kent
 
Сообщений: 142
Регистрация: 17.12.2002
Возраст: 43

Kent вне форума Не в сети
#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-ой системе. Изменишь по своему усмотрению.
  Ответить с цитированием
Поиск в теме: 


Опции темы

Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind