Обработка строки Unicode в версиях Delphi <= 2007

Вы хотите что-то подобное?

.subject, .message {
  float:left;
  display:block;
}
.subject {
  width:35%;
  text-align:right;
}
.message {
  width: 65%;
  padding-top: 10px;
  left: 10px;
  position: relative;
}
<div class="subject">
  <h2>Hello this is subject</h2>
</div>
<div class="message">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Odio ut enim blandit volutpat. Posuere morbi leo urna molestie at elementum eu. Volutpat maecenas volutpat blandit aliquam. Ornare arcu odio ut sem nulla pharetra diam. Quam adipiscing vitae proin sagittis nisl rhoncus mattis rhoncus. Egestas sed sed risus pretium quam. Turpis egestas pretium aenean pharetra magna ac placerat vestibulum lectus. Ultrices gravida dictum fusce ut placerat orci nulla pellentesque dignissim. A arcu cursus vitae congue mauris rhoncus. Morbi quis commodo odio aenean sed adipiscing diam. Volutpat lacus laoreet non curabitur gravida arcu ac tortor dignissim.

Eros donec ac odio tempor orci dapibus. Venenatis lectus magna fringilla urna porttitor rhoncus. Mattis ullamcorper velit sed ullamcorper morbi tincidunt. Lectus urna duis convallis convallis tellus id interdum velit laoreet. Eget nunc lobortis mattis aliquam. Ultrices gravida dictum fusce ut placerat orci nulla pellentesque dignissim. Urna molestie at elementum eu facilisis sed odio. Arcu ac tortor dignissim convallis aenean et tortor at. Dictum sit amet justo donec. Tristique et egestas quis ipsum suspendisse ultrices gravida dictum fusce. Cras semper auctor neque vitae. Hendrerit gravida rutrum quisque non tellus orci ac. Dui id ornare arcu odio ut sem. Vitae elementum curabitur vitae nunc. Lectus quam id leo in vitae turpis massa sed. Lobortis scelerisque fermentum dui faucibus in ornare. Dui vivamus arcu felis bibendum ut tristique et egestas. Nisl suscipit adipiscing bibendum est ultricies integer. Pretium aenean pharetra magna ac placerat vestibulum.

In ornare quam viverra orci sagittis eu. Justo nec ultrices dui sapien eget. Mollis aliquam ut porttitor leo. Ullamcorper eget nulla facilisi etiam. Vestibulum sed arcu non odio euismod lacinia at quis. Amet venenatis urna cursus eget nunc scelerisque. Diam ut venenatis tellus in metus vulputate eu scelerisque. Pharetra convallis posuere morbi leo urna molestie at elementum. In nisl nisi scelerisque eu ultrices. Nibh venenatis cras sed felis eget velit. Malesuada proin libero nunc consequat interdum varius sit amet mattis. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus et. In ante metus dictum at tempor commodo ullamcorper a. A scelerisque purus semper eget duis at tellus. Gravida in fermentum et sollicitudin ac orci phasellus. Ac feugiat sed lectus vestibulum mattis ullamcorper velit sed. Tellus cras adipiscing enim eu turpis egestas pretium. Nunc id cursus metus aliquam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames.

Volutpat odio facilisis mauris sit amet massa vitae. Id nibh tortor id aliquet lectus proin. Sit amet porttitor eget dolor morbi non arcu risus. Pretium aenean pharetra magna ac. Tempor nec feugiat nisl pretium fusce id velit ut. Turpis egestas pretium aenean pharetra. Accumsan in nisl nisi scelerisque eu ultrices. Eros donec ac odio tempor orci dapibus ultrices in iaculis. Potenti nullam ac tortor vitae purus faucibus. Fringilla est ullamcorper eget nulla facilisi etiam dignissim diam. Feugiat pretium nibh ipsum consequat. Varius duis at consectetur lorem donec massa sapien faucibus et. Lectus quam id leo in vitae.

Id aliquet lectus proin nibh nisl condimentum. Erat imperdiet sed euismod nisi. Tortor consequat id porta nibh venenatis cras. Commodo elit at imperdiet dui accumsan sit amet. Integer vitae justo eget magna fermentum iaculis eu non diam. Ultricies mi eget mauris pharetra et ultrices neque ornare aenean. In eu mi bibendum neque egestas congue quisque egestas diam. Urna nunc id cursus metus aliquam eleifend mi in nulla. Etiam non quam lacus suspendisse faucibus interdum. Malesuada nunc vel risus commodo. Faucibus purus in massa tempor nec feugiat nisl pretium fusce.</p>
</div>

11
задан jamiei 20 December 2008 в 10:55
поделиться

5 ответов

Версиям Delphi до Delphi 2009 действительно встраивали поддержку Unicode. WideString тип был доступен начиная с Delphi 4, я думаю, возможно, ранее. WideString не так хорошо как новое UnicodeString введите, но это все еще содержит 16-разрядные символы Unicode, и можно преобразовать тип его к PWideChar отправить строки в API-функции Unicode. Windows единица объявляет большинство "широких" версий API-функций, и нет ничего, чтобы мешать Вам объявить другие функции самим при нахождении некоторых пропавших без вести.

То, что не имеют предыдущие версии, является поддержкой Unicode в VCL. Для этого можно использовать средства управления Unicode Tnt. Они раньше были свободны. Похож существует несколько мест, где последняя бесплатная версия все еще доступна: (1), (2).

JCL имеет несколько единиц для работы с Unicode. JclWideStrings единица имеет главным образом легкие служебные функции. JclUnicode единица - больше завершенное, но она также включает значительный ресурс для определения символьных свойств всех символов Unicode.

С JCL у Вас есть несколько вариантов для классов для содержания списков WideString значения. Я думаю, что Delphi 7 даже идет с классом для этого.

Не думайте, что просто, потому что у Вас нет Delphi 2009, который Вы не можете записать программе Unicode.

Если у Вас есть a WideString значение, и Вы хотите закодировать его UTF-8, затем звонить Utf8Encode функция. Это возвратится AnsiString значение, или возможно Utf8String, если Ваша версия Delphi объявляет тот тип. Это не то же как 2009 Delphi Utf8String введите, все же. 2009 Delphi автоматически преобразует в UnicodeString или AnsiString(x) и наоборот в операторах присваивания. Предыдущие версии просто имеют сингл AnsiString введите, таким образом, необходимо отслеживать для себя, какие переменные содержат данные UTF-8 и которые держат данные Ansi. (Венгерская запись на Ваших именах переменной и названиях параметра может помочь Вам отслеживать.) И конечно, существует также a Utf8Decode функция для преобразования данных UTF-8 назад к WideString.

Для обработки других кодировок символов Вы хотите проверить, Открывают XML, свободную библиотеку XML для Delphi. Как часть ее обработки XML, это имеет поддержку преобразования между 70 различными кодировками.

28
ответ дан 3 December 2019 в 01:02
поделиться

Используйте тип widestring и кодирующие функции к/от utf8 (UTF8Encode/UTF8Decode)

Не используйте строковый тип и не используйте Ansi-функции - при выполнении этого Вы теряете информацию.

6
ответ дан 3 December 2019 в 01:02
поделиться

Я создал полное unicode приложение, не используя Delphi 2009 (до, он - выпуск).

Я использовал следующее:

  1. Используйте widestring в качестве основного типа данных String.

  2. Используемый компонент базы данных с поддержкой unicode (использование ADO widestring также, но я' не использовал его, потому что это не обрабатывает unicode имена полей).

  3. Используемый свободный TNTControls для UI, хорошо работал, но это - то же как Стандартные средства управления, не имейте многого функциями как средства управления другого третьего лица.

  4. Я имею, устанавливают VM с другим языком, таким образом, я могу протестировать версию в другой системе, которая не поддерживает мой язык.

  5. FastReport был моим инструментом создания отчетов, которые поддерживают Unicode также.

также я использовал DIConverters от Вдохновения Delphi для преобразования базы данных от ansi до UTI8 с, он - функции, можно использовать его для преобразования из UTF8, и это - бесплатное программное обеспечение;-)

существует также Delphi проекта с открытым исходным кодом основные принципы, которые имеют функцию usefual для unicode.

но я думаю, если Вы могли бы использовать D2009 для полной поддержки unicode, Ваша работа будет намного легче и быстрее, потому что Вы не будете использовать медленный widestring тип данных, и Вы найдете, что большая часть третьего лица предложила версию Unicode или работающий теперь над ним.

6
ответ дан 3 December 2019 в 01:02
поделиться

Преобразование приложения 2009 года перед Delphi к unicode является трудным, но выполнимым. Я разделил его на 3 задачи.

  1. Во-первых, удостоверьтесь, что Ваша база данных обрабатывает строки unicode. Предпочтительно поддержка UTF-16. Удостоверьтесь, что весь Ваш код базы данных обрабатывает widestrings правильно, и драйверы, которые Вы используете, обрабатывают это хорошо также.
  2. Преобразуйте всю свою бизнес-логику из использования строк к использованию WideStrings. Очень легко скучать по некоторым, и Вы не получите ошибок, поскольку компилятор неявно преобразует widestring, чтобы представить в виде строки, если Вы забудете какие-либо методы. Также удостоверьтесь, что Вы изменяете все стандартные строковые функции на эквиваленты WideString. Этот процесс должен расшириться на любые третьи компоненты части, которые можно использовать.
  3. Заключительная часть должна изменить типичное и третье лицо визуальные компоненты, которые Вы можете иметь к эквивалентам WideString. Это должно быть сделано, где когда-либо Вы будете отображать строки, которые могут содержать unicode символы.

Вдобавок ко все, что удостоверяется Ваше тестирование, полно, и использует unicode символы, которые на самом деле используют высокий байт. Если Вы просто протестируете использование латинского набора символов, то Вы пропустите ошибки.

5
ответ дан 3 December 2019 в 01:02
поделиться

Если все, что необходимо сделать, действительно преобразовывают внутренние программой строки от системного кодирования до UTF-8 и назад, то используют библиотечные функции, которые упомянул Uwe Raabe. Если Вы находитесь все еще на Delphi 4 или 5 (которые не имеют тех функций), Вы могли использовать функции, которые находятся в GNU gettext для Delphi.

И не позволяйте всем ответам о движении полностью, WideString пугают Вас - использующий UTF-8 в качестве кодирования для обмена данными (это - то, как я понимаю, Ваш вопрос) должно быть возможным в нормальной программе Delphi Ansi без больших проблем, пока Вы имеете дело с данными, которые являются на 100% представимыми в Вашем кодировании Windows.

3
ответ дан 3 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: