Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2012, 10:51   #1
КАРТОВЕДЪ
 
Регистрация: 19.03.2009
Сообщений: 8
По умолчанию Как правильно прочитать файл с кодировкой UTF-8

Всем привет!
Имеется файл с кодировкой UTF-8, нужно по очереди считывать строки и в дальнейшем с ними работать. Проблема в том, что русские буквы считываются кракозяблями. Считываю так:
AssignFile - Reset - readln

В результате русские буквы получаются так:
п»їРЎРђРџР¤Р˜Р*

Как правильно считывать? Файл для теста прилагаю.
Вложения
Тип файла: txt TEST_Original.txt (155 байт, 158 просмотров)
КАРТОВЕДЪ вне форума Ответить с цитированием
Старый 07.02.2012, 10:56   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

utf8ToAnsi или UTF8Encode
Человек_Борща вне форума Ответить с цитированием
Старый 07.02.2012, 11:31   #3
КАРТОВЕДЪ
 
Регистрация: 19.03.2009
Сообщений: 8
По умолчанию

Спасибо, почти получилось. При считывании первой строки вначале появляется вопросительный знак, все последующие строки читает нормально.

?САПФИР NAQST8MVC
АМЕТИСТ NRPXTXL15

Пробовал по разному, все равно, даже без перекодировки, вначале появляются ненужные символы. Вот одна и таже строка стоит первой и второй в файле.

п»їРђРњР•РўР˜РЎРў NRPXTXL15
РђРњР•РўР˜РЎРў NRPXTXL15
КАРТОВЕДЪ вне форума Ответить с цитированием
Старый 07.02.2012, 11:44   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Далеко не все символы из UTF-8 можно перевести в 1251. В начале первой строки видимо и стоит какая-то бяка. Возможно длина текста в файле или что-то другое
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.02.2012, 12:00   #5
КАРТОВЕДЪ
 
Регистрация: 19.03.2009
Сообщений: 8
По умолчанию

Так по разному пробовал, и строки местами менял, и символы первые менял, все равно первая строка неправильно считывается.
КАРТОВЕДЪ вне форума Ответить с цитированием
Старый 07.02.2012, 12:23   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Первые три символа вашего файла никак не переведутся в 1251. Если они всегда там - убирайте
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.02.2012, 12:45   #7
КАРТОВЕДЪ
 
Регистрация: 19.03.2009
Сообщений: 8
По умолчанию

Действительно, это сигнатура UTF-8, похоже придется вручную ее убирать.
КАРТОВЕДЪ вне форума Ответить с цитированием
Старый 08.02.2012, 12:19   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Её не убирать, а проверять надо. Не нужно всё без разбору гнать через utf8ToAnsi (или что вы там использовали). Конвертировать нужно только те файлы, у которых указан BOM.

UTF-8, кстати, - не единственный вариант, в котором может быть текстовый файл.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 08.02.2012, 12:31   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

P.S. Вообще, если файл разовый, то можно просто его перевести в ANSI и всё.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с кодировкой UTF-8 Prontit Общие вопросы Delphi 2 29.07.2011 18:30
Как правильно прочитать фаил(.txt) в командной строке? Призрак286397 C++ Builder 3 15.06.2010 18:10
Помогите с записью строк в фаил с кодировкой UTF-8 Виталий Серов Общие вопросы Delphi 1 26.03.2009 03:22
Xml, как правильно прочитать Parcenson Общие вопросы Delphi 0 02.09.2008 06:29