获取一个unicode,隐藏的符号,作为Delphi中的数据

时间:2014-01-09 14:55:39

标签: delphi unicode delphi-7 symbols ansi

我正在编写一些Excel电子表格数据的分隔符,我需要在一个大字符串中读取向右箭头符号和pilcrow符号。

行尾的pilcrow符号相当简单,使用Chr函数和AnsiChar代码182。

向右箭头更难以弄明白。它没有AnsiChar代码。它的Unicode值是'2192'。但是,我无法弄清楚如何将它变成字符串或字符类型供我在我的函数中使用。

有任何简单的方法吗?

2 个答案:

答案 0 :(得分:2)

您不能直接使用2192字符。但由于STRING变量也不能包含此值(因此您的TStringList也不能),这无关紧要。

在您阅读之后,您的StringList中表示的2192字符是什么字符?可能由这三个独立的字符组成:0xE2 0x86 0x92(采用UTF-8格式)。因此,简单的解决方案是首先用一个唯一的字符替换这三个字符,然后将这些字符分配给TStringList的Delimiter字段。

像这样:

.
.
.
<Read file into a STRING variable, say S>
S := ReplaceStr(S,#$E2#$86#$92,'|');
SL := TStringList.Create;
SL.Text := S;
SL.Delimiter := '|';
.
.
.

您必须选择3字节UTF-8 Unicode字符的单字符表示形式,这在您的数据中不会出现。

答案 1 :(得分:1)

您需要将该字符表示为UTF-16字符。在Unicode Delphi中你可以这样做:

Chr(2192)

类型WideChar

但是,您使用的是Delphi 7,这是一个Unicode前Delphi。所以你必须这样做:

var
  wc: WideChar;
....
wc := WideChar(2192);

现在,这可能对您无济于事,因为它听起来有点像您的代码使用8位ANSI文本。在这种情况下,该字符不能以任何8位ANSI字符集进行编码。如果您真的必须使用该字符,则需要使用Unicode文本。