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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2011, 07:39   #1
Евгений79
Пользователь
 
Регистрация: 22.04.2011
Сообщений: 19
По умолчанию unicode to ansi

Как перевести текст такого вида \u0410\u0440\u0432\u0440\ в ansi ?
Я конечно могу создать массив с таблицей соответствий \u0410 = А и перебором все перекодировать. Но боюсь люди усомнятся в моей ориентации.
Евгений79 вне форума Ответить с цитированием
Старый 25.05.2011, 09:50   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

http://www.google.ru/search?client=o...hannel=suggest
p51x вне форума Ответить с цитированием
Старый 25.05.2011, 10:30   #3
Евгений79
Пользователь
 
Регистрация: 22.04.2011
Сообщений: 19
По умолчанию

Не помогает что-то, не могу врубиться.
У меня есть обычный текстовый файл, в нем русские буквы закодированы таким образом \u0410\u0440\u0432\u0440\.
Я загружаю текст из файла в переменную text: String;
Что дальше делать?
Евгений79 вне форума Ответить с цитированием
Старый 25.05.2011, 10:45   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

берете блок \u0410, далее выделяете число.
его в WideString загоняете(через Chr вродь)
и тп.
в конце берете String:=WideString
поидее должно все норм быть
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.05.2011, 14:14   #5
Евгений79
Пользователь
 
Регистрация: 22.04.2011
Сообщений: 19
По умолчанию

Delphi syntax:
function Chr(X: Byte): Char;

var
uni: WideString

Так? Но ведь можно только 1 байт. Хотя ошибка не возникает.
uni:= chr(0410);

String:=uni - выдает какую-то закорючку, должна быть "А".
Евгений79 вне форума Ответить с цитированием
Старый 25.05.2011, 14:53   #6
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Код:
// code: \uXXXX
function DecodeCahr (Code: string):WideChar;
 begin
  code := '$' + copy(code,3,4);
  result := widechar(strtoint(code));
 end;
begin
 ShowMessage(DecodeCahr('\u0410'));
end;
в подпрограмму скармливать по одному коду в формате \uXXXX
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 25.05.2011, 17:54   #7
Евгений79
Пользователь
 
Регистрация: 22.04.2011
Сообщений: 19
По умолчанию

Супер! Огромное спасибо.
Евгений79 вне форума Ответить с цитированием
Старый 25.05.2011, 18:00   #8
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

я серьезно, а чем плох вариант с массивом?
долго? или принципиально не круто?
xrob вне форума Ответить с цитированием
Старый 25.05.2011, 20:08   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а чем плох вариант с массивом?
1) тем, что это как минимум чрезвычайно ТРУДОЗАТРАТНО!
2) гарантированно в вашем массиве не будет хватать символов, которые есть в WideChar - т.е. функция будет работать криво на некоторых кодовых таблицах/символах...
3) вся эта реализация будет (как минимум) не быстрее стандартных средств...
4) это будет напоминать изобретение велосипеда - зачем придумывать то, что уже давно придумано (и реализовано!)
5) подобный стиль программирования называется индусским кодом (он же быдлокод)...

Достаточно причин?.. (имхо первых двух более чем достаточно!)

p.s. возьмём простой отвлечённый пример.
если Вам нужно из строки получить число, которое в ней записано - Вы воспользуетесь функцией VAL (StrToInt...) или реализуете свою процедуру разбора строки и перевода её в число?.. НУ и тоже касается перевода числа в строку...

Последний раз редактировалось Serge_Bliznykov; 25.05.2011 в 20:14.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.05.2011, 21:49   #10
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

ну вообще, лично для меня было гораздо трудозатратней было найти РАБОТАЮЩУЮ функцию для перевода UTF-8 в Ansi
и я написал быдлокод, как раз с использованием массива =)
"не быстрее стандартных средств", с этим согласен, но

code := '$' + copy(code,3,4);
result := widechar(strtoint(code));

что же в итоге делает уже придуманный велосипед?
по сути тоже самое. разве что в функцию уже передается готовый индекс,
по которому она возвращает символ из массива (а если не так, то как тогда?),
но индекс этот мы все-равно готовим вручную ( code := '$' + copy(code,3,4); )

"если Вам нужно из строки получить число, которое в ней записано - Вы воспользуетесь функцией VAL (StrToInt...) или реализуете свою процедуру разбора строки и перевода её в число?"

если предположить что я просто не знаю о существовании StrToInt,
то да, реализую свою процедуру перевода строки =))
как это было например с UTF-8

а в общем я с вами согласен, если знаешь необходимые готовые функции
и они корректно работают - зачем создавать новые?
но на практике всегда ли так бывает?
просто ТС так грубо отозвался о варианте с массивами,
что мне очень захотелось переспросить, что в этом ужасного?...

теперь понял, спасибо...
xrob вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перекодировать файл в UTF-8->ANSI, ANSI -> UFT-8 Человек_Борща Общие вопросы Delphi 7 19.05.2011 18:47
Ansi в UTF-8 и наоборот UTF-8 в Ansi Alar Работа с сетью в Delphi 3 09.12.2010 17:02
ANSI C ... eva.t Помощь студентам 11 11.02.2010 23:20
Конвертировать строку из ANSI в UNICODE Миша Общие вопросы Delphi 8 28.12.2009 18:23
ANSI HunterMan Win Api 2 18.04.2008 23:17