2014-01-09 46 views
0

我正在爲一些Excel電子表格數據編寫分隔符,我需要在大字符串中讀取向右箭頭符號和pilcrow符號。獲取一個unicode,隱藏符號,作爲Delphi中的數據

的段落符號符號,用於行的端部,是相當簡單,使用Chr函數和ANSIChar類型代碼182

的向右箭頭一直比較棘手弄清楚。它沒有一個AnsiChar代碼。它的Unicode值是'2192'。然而,我不能弄清楚如何將它變成一個字符串或字符類型,以供我在我的函數中使用。

任何簡單的方法來做到這一點?

回答

1

您需要將該字符表示爲UTF-16字符。在Unicode的德爾福你會做這樣的:

Chr(2192) 

這是WideChar類型。

但是,您正在使用Delphi 7,它是一個預編碼的Delphi。所以,你必須做這樣的:

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

現在,這可能全部是無濟於事的,因爲你這聽起來有點像你的代碼正在與8位ANSI文本。在這種情況下,該字符不能用任何8位ANSI字符集編碼。如果您確實必須使用該字符,則需要使用Unicode文本。

+0

那好吧。我使用的是Delphi 7,所以我嘗試了WideChar(2192)。但我的功能確實需要一個Char,而不是WideChar。無論如何要將這個向右箭頭作爲char? – Chucky

+1

你有一個方形釘和一個圓孔。該字符不存在於8位ANSI編碼中。想想看。 8位ANSI中只有256個字符可用。 –

+0

我幫你。我面臨的問題是TStringList的分隔符字段只接受字符。我不知道如何解決這個問題,因爲我正在處理的數據默認是向右箭頭。未完待續。 – Chucky

2

您不能直接使用2192字符。但是由於STRING變量不能包含這個值(因爲你的TStringList不能),這並不重要。

什麼字符是你的StringList中表示的2192字符在讀完它後?可能由這三個單獨的字符組成:0xE2 0x86 0x92(UTF-8格式)。因此,簡單的解決方案是,首先用一個唯一的字符替換這三個字符,然後將其分配給TStringList的分隔符字段。

像這樣:

. 
. 
. 
<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字符的單字符表示不會在你的數據在其他地方發生。

+0

爲什麼數據是UTF-8? Office使用UTF-16。 –