2008-11-20 27 views
4

Да, мы говорим о кодах ASCII. Мои пристрастия я здесь не Дельфи.Как преобразовать символы Unicode в коды ascii в delphi 7?

+0

Любая конкретная версия Delphi? – 2008-11-20 12:48:02

+0

Название действительно не говорит все! Я не уверен, что вы понимаете unicode, иначе я не понял ваш вопрос. – Steve 2008-11-20 13:09:47

+0

Мы уже знали, что мы говорим о кодах ASCII, потому что это то, что вы сказали в названии. Но вы не сказали, какое преобразование вы имеете в виду. Можете ли вы привести несколько примеров ввода и результаты, которые вы ожидаете от них? Возможно, вам нужно, чтобы разработчик Delphi задал вопрос. – 2008-11-21 02:58:19

ответ

6

Для Delphi 7 я получил бы the free Unicode Library by Mike Lischke, кто является автором Virtual Treeview.

В библиотеку Libary входит множество функций преобразования, которые можно использовать в Unicode, и вы можете использовать те, которые имеют наибольший смысл в вашем приложении.

Or you can upgrade to Delphi 2009, который имеет встроенные процедуры кодирования и собственную библиотеку функций преобразования.

1

Это зависит от того, какое именно вы являетесь вашим переводом. Если вы хотите сопоставить 127 младших символов с эквивалентом Unicode, вы можете использовать явное приведение. Но это создает мусор, если строка содержит более высокие символы.

Если вам нужны сопоставления, такие как ë -> e и û -> u, вы можете написать свой собственный код. Но имейте в виду, что всегда есть символы, которые нельзя преобразовать.

+0

Вы не хотите писать свой собственный код для преобразования набора символов! – lkessler 2008-11-21 01:05:27

1

В качестве примера буква A представлена ​​в unicode как U + 0041, а в ansi - всего 41. Таким образом, преобразование было бы довольно простым, но вы должны узнать, как кодируется символ Юникода. Наиболее распространенными являются UTF-16 и UTF-8. UTF 16, в основном два байта на символ, но даже это упрощение, так как символ может иметь больше байтов. UTF-8 звучит так, как будто это означает 1 байт на символ, но может быть 2 или 3. Чтобы еще больше усложнить ситуацию, UTF-16 может быть немного большим или большим. (U + 0041 или U + 4100).

Если ваш вопрос не имеет смысла, если вы хотите, например, преобразовать арабскую букву ain U + 0639 в ansi в английский язык. Вы не можете.

1

«ASCII» - это имя конкретного сопоставления символов с цифрами, но некоторые люди говорят «код ASCII», когда они вообще не означают ASCII; они просто хотят числовое значение символа, независимо от того, какое отображение действует в то время. Означает ли это описание для вас?

Если да, то вы можете использовать стандартную функцию Ord, чтобы получить значение кодовой точки Unicode любого символа Юникода, который у вас есть.

var 
    wc: WideChar; 
    ws: WideString; 
    x: Word; 

x := Ord(wc); 
x := Ord(ws[1]); 

Если вы на самом деле означает ASCII, хотя, тогда вы должны быть более конкретными о том, какие преобразования вы имеете в виду.

1

См связанные вопросы о преобразовании из Unicode в ASCII:

В общем, набор символов из сотен тысяч записей не могут быть преобразованы в набор символов из 127 записей без какой-либо потери информации или схемы кодирования.

1

Вы можете использовать эту функцию в http://swissdelphicenter.ch/en/showcode.php?id=1692
Он преобразует строку Unicode в строку Ansi, используя указанную кодовую страницу.
Если вы хотите преобразовать с помощью системы по умолчанию кодовую (определенный в региональных вариантов, как не-юникод кодировке), вы можете сделать это просто, как следующее:

var 
    ws: widestring; 
    s: string; 
begin 
    s:=string(ws) 
3

Давайте кое-что прямо. Набор символов (кодировка) и кодировка символов - это две связанные, но разные концепции. Набор символов представляет собой абстрактный список символов с определенным кодом целочисленного символа. Затем существуют кодировки символов, которые в основном представляют собой алгоритм, описывающий, как символы представлены в байтах.

ASCII действует как набор символов и кодировка. Он использует 7 бит для выражения 128 символов (94 для печати). Unicode, с другой стороны, представляет собой набор символов, выражающий 1,114,112 кодовых точек. Существует несколько кодировок для представления строк Unicode, но наиболее примечательными являются UTF-8, UTF-16, UTF-16LE и UTF-32. Другими словами, один символ Unicode может быть представлен различными способами в зависимости от кодировок.

Как преобразовать символы Unicode в коды ascii в delphi 7?

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

  1. У меня есть строка Unicode в некоторой кодировке, которая включает только символы ASCII для печати. Как преобразовать строку в массив байтов кодировки ASCII?

  2. У меня есть строка Unicode в некоторой кодировке, которая также включает символы, не содержащие ASCII, такие как иероглифы. Как кодировать строку в кодировку ASCII без потери информации, а затем декодировать ее обратно в исходную строку Unicode?

Если вы имеете в виду первый, вы можете загрузить строку Unicode в WideString как Осман говорит и делать

var 
    original: WideString; 
    s: AnsiString; 
begin 
    s := AnsiString(original); 

Если вы имеете в виду второе, вы должны были бы алгоритм общего кодирования как Base64 кодирования , Вы можете использовать DCPBase64.pas, включенный в DCPcrypt v2 Beta 3 Дэвида Бартона.

Смежные вопросы