如何在delphi 7中将unicode字符转换为ascii代码?

时间:2008-11-20 12:38:40

标签: delphi unicode ascii

是的,我们正在谈论ASCII码。我的意见我不是德尔福开发者。

7 个答案:

答案 0 :(得分:6)

对于Delphi 7,我会得到the free Unicode Library by Mike Lischke,他是Virtual Treeview的作者。

该库包含许多转换函数以及来自Unicode的转换函数,因此您可以使用在您的应用程序中最有意义的转换函数。

Or you can upgrade to Delphi 2009具有内置编码例程,以及自己的转换函数库。

答案 1 :(得分:3)

让我们直截了当。字符集(charset)和字符编码是两个相关但不同的概念。字符集是一个抽象的字符列表,其中包含某种整数字符代码。然后是字符编码,它基本上是一种描述字符如何以字节表示的算法。

ASCII充当字符集和编码。它使用7位表示128个字符(94个可打印)。另一方面,Unicode是一个字符集,表示1,114,112个代码点。有几种编码来表示Unicode字符串,但最值得注意的是UTF-8,UTF-16,UTF-16LE和UTF-32。换句话说,根据编码,可以用不同的方式表示单个Unicode字符。

  

如何在delphi 7中将unicode字符转换为ascii代码?

我认为这个问题可以用两种方式解释。

  1. 我在某些编码中有一个Unicode字符串,只包含ASCII可打印字符。如何将字符串转换为ASCII编码的字节数组?

  2. 我在某些编码中有一个Unicode字符串,其中还包含非ASCII可打印字符,例如中文字符。如何将字符串编码为ASCII编码而不丢失信息,然后将其解码回原始的Unicode字符串?

  3. 如果你的意思是第一个,你可以像在Osman说的那样将Unicode字符串加载到WideString中

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

    如果你的意思是第二个,你需要一个通用的编码算法,如Base64编码。您可以使用David Barton DCPBase64.pas中包含的DCPcrypt v2 Beta 3

答案 2 :(得分:1)

这取决于您对转换的定义。如果要将127个最低字符映射到Unicode等效字符,可以使用显式强制转换。但如果字符串包含更高的字符,则会产生垃圾。

如果你想要像ë - >这样的映射e和û - >你,你可以编写自己的代码。但请注意,总有一些字符无法转换。

答案 3 :(得分:1)

例如,字母A在unicode中表示为U + 0041,在ansi中表示为41。因此,转换它将非常简单,但您必须找出unicode字符的编码方式。最常见的是UTF-16和UTF-8。 UTF 16,基本上是每个字符两个字节,但即使这样也过于简单化,因为字符可能有更多的字节。 UTF-8听起来好像它意味着每个字符1个字节,但可以是2或3.更复杂的是,UTF-16可以是小端或大端。 (U + 0041或U + 4100)。

你的问题没有意义,如果你想在英语语言环境中将阿拉伯语字母a + U + 0639转换为ansi。你不能。

答案 4 :(得分:1)

“ASCII”是字符到数字的特定映射的名称,但有些人说“ASCII代码”时它们根本不是指ASCII;他们只想要一个字符的数值,无论当时有效的映射。这种描述是否适用于您?

如果是这样,那么您可以使用Ord标准函数来获取您拥有的任何Unicode字符的Unicode代码点值。

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

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

如果你真的是指ASCII,那么你必须更具体地考虑你想要的转换类型。

答案 5 :(得分:1)

请参阅有关从Unicode转换为ASCII的相关问题:

通常,在没有信息丢失或编码方案的情况下,无法将数十万个条目的字符集转换为127个条目的字符集。

答案 6 :(得分:1)

您可以使用http://swissdelphicenter.ch/en/showcode.php?id=1692中的功能 它使用指定的代码页将Unicode字符串转换为Ansi字符串。
如果你想使用默认系统代码页进行转换(在区域选项中定义为非unicode代码页),你可以这样做:

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