Уникод UTF8 стринг, Linux, RU_ru.utf8, FPC

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Уникод UTF8 стринг, Linux, RU_ru.utf8, FPC

Сообщение cr0acker » 27.10.2009 16:28:02

Доброго времени суток уважаемый ALL.
Возможно гуру данного форума помогут мне решить проблему.
Есть текстовой файл в с русскуими буквами в кодировек UTF8, вида
Код: Выделить всё
Адыгея                                  :Респ      :0100000000000:385000:0100:    :79000000000:0:
Башкортостан                            :Респ      :0200000000000:450000:0200:    :80000000000:0:
Алтай                                   :Респ      :0400000000000:649000:0400:    :84000000000:0:
Ингушетия                               :Респ      :0600000000000:386000:0600:    :26000000000:0:

При чтении его длина анси строки полученной как length(UTF8toAnsi(tempstring) сотавляет всегда 97 символов,
длина строки в формате utf8 полученного в виде length(tempstring) составляет от 100 до 120 симоволов в зависимости от того сколько двухбайтных символов занимают русские буквы в первой колокне. Соответственно при использования функций delete, copy и других для работы со строками приодится то же переводить строки с которыми ты работаеш в Анси, а при преобразовании русский язык соответсвенно теряется, може есть у кого аналог этих функций нормально работающих с utf8.
cr0acker
новенький
 
Сообщения: 13
Зарегистрирован: 09.11.2006 01:59:09

Re: Уникод UTF8 стринг, Linux, RU_ru.utf8, FPC

Сообщение Mr.Smart » 27.10.2009 17:20:25

В модуле LCLProc есть аналоги данных функций для работы с UTF-8.
UTF8*
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Уникод UTF8 стринг, Linux, RU_ru.utf8, FPC

Сообщение cr0acker » 29.10.2009 02:16:47

Ок, а я есть в фрипаскале паскале UFT8ой pchar? Просто если деалать преобразования и string(c русским UTF8) в pchar с помощью функции pchar русский текст пропадает/
cr0acker
новенький
 
Сообщения: 13
Зарегистрирован: 09.11.2006 01:59:09

Re: Уникод UTF8 стринг, Linux, RU_ru.utf8, FPC

Сообщение Mr.Smart » 29.10.2009 10:59:35

Код: Выделить всё
var
  s: String; // строка в UTF-8
  p: PChar;
begin
  p:=PChar(s);
....

Ничего не пропадает.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Уникод UTF8 стринг, Linux, RU_ru.utf8, FPC

Сообщение v-t-l » 29.10.2009 17:06:24

cr0acker писал(а):если деалать преобразования и string(c русским UTF8) в pchar с помощью функции pchar русский текст пропадает

никакого преобразования строки не происходит:
Код: Выделить всё
var
  s: string;
  p1,p2: PChar;
begin
  s := 'some string';
  p1 := PChar(s);
  p2 := @s[1];
  writeln('p1=', Int64(p1)); //int64 - на случай 64-битной платформы :)
  writeln('p2=', Int64(p2));
  readln;
end.

- PChar(s) - тоже самое, что адрес первого символа в строке.
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Уникод UTF8 стринг, Linux, RU_ru.utf8, FPC

Сообщение cr0acker » 30.10.2009 00:45:24

Ок не пропадает. Пропадает где то в другом месте. Почему при работе с Mysql с установками
Код: Выделить всё
SQuery1:PChar='set character_set_client='+#39+'utf8'+#39+';';
SQuery2:PChar='set character_set_results='+#39+'utf8'+#39+';';
SQuery3:PChar='set collation_connection='+#39+'utf8_unicode_ci'+#39+';';
SQuery4:Pchar='set character_set_connection='+#39+'utf8'+#39+';';

Запрос из базы выполняется нормально и русский язык виден, а в случае запроса добавляющего записи вместо русского языка в базу попадают знаки вопроса, хотя если с помощью wrteln его вывести на экран, то с русским всё ок, так же если скопипастить получившийся запрос ручками в БД, то всё с русским то же всё ок.
Скажем запросы выведенный в консоле с помощью writeln выглядт так:
Код: Выделить всё
INSERT INTO russ_regs VALUES('85','РЕСП','Дагестан','05');

SLECT * FROM russ_regs выглядет такЖ
Код: Выделить всё
| 85     | ????     | ????????                                 | 05     |
, если же квери выполнить ручками, то рузультат будет
Код: Выделить всё
85     | РЕСП | Дагестан                         | 05     |
cr0acker
новенький
 
Сообщения: 13
Зарегистрирован: 09.11.2006 01:59:09

Re: Уникод UTF8 стринг, Linux, RU_ru.utf8, FPC

Сообщение Vadim » 30.10.2009 06:27:36

cr0acker
А каким образом Вы запрос серверу посылаете?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Уникод UTF8 стринг, Linux, RU_ru.utf8, FPC

Сообщение cr0acker » 30.10.2009 21:07:16

Вот таким:
Код: Выделить всё
uses mysql50

.....
Код: Выделить всё
querystring:='INSERT INTO russ_regs VALUES('+#39+result[i].number+#39+','+#39+result[i].form+#39+','+#39+result[i].name+#39+','+#39+result[i].prefix+#39+ ');';
if (mysql_query(sock,pchar(querystring)) < 0) then begin
        Writeln (stderr,'Query failed ');
        writeln (stderr,mysql_error(sock));
        Halt(1);
      end;

cr0acker
новенький
 
Сообщения: 13
Зарегистрирован: 09.11.2006 01:59:09

Re: Уникод UTF8 стринг, Linux, RU_ru.utf8, FPC

Сообщение AbakAngelSoft » 31.10.2009 12:39:00

запрос SET NAMES перед обменом данными с mysql выполнен? какая кодировка указана?

Добавлено спустя 2 минуты 49 секунд:
и для запросов
SQuery1:PChar='set character_set_client='+#39+'utf8'+#39+';';
SQuery2:PChar='set character_set_results='+#39+'utf8'+#39+';';
SQuery3:PChar='set collation_connection='+#39+'utf8_unicode_ci'+#39+';';
SQuery4:Pchar='set character_set_connection='+#39+'utf8'+#39+';';

проверили что папка с локализацией utf8 называется именно так? у меня на одной машине utf8, а на другой UTF-8
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru