我正在爲一些Excel電子表格數據編寫分隔符,我需要在大字符串中讀取向右箭頭符號和pilcrow符號。獲取一個unicode,隱藏符號,作爲Delphi中的數據
的段落符號符號,用於行的端部,是相當簡單,使用Chr函數和ANSIChar類型代碼182
的向右箭頭一直比較棘手弄清楚。它沒有一個AnsiChar代碼。它的Unicode值是'2192'。然而,我不能弄清楚如何將它變成一個字符串或字符類型,以供我在我的函數中使用。
任何簡單的方法來做到這一點?
我正在爲一些Excel電子表格數據編寫分隔符,我需要在大字符串中讀取向右箭頭符號和pilcrow符號。獲取一個unicode,隱藏符號,作爲Delphi中的數據
的段落符號符號,用於行的端部,是相當簡單,使用Chr函數和ANSIChar類型代碼182
的向右箭頭一直比較棘手弄清楚。它沒有一個AnsiChar代碼。它的Unicode值是'2192'。然而,我不能弄清楚如何將它變成一個字符串或字符類型,以供我在我的函數中使用。
任何簡單的方法來做到這一點?
您需要將該字符表示爲UTF-16字符。在Unicode的德爾福你會做這樣的:
Chr(2192)
這是WideChar
類型。
但是,您正在使用Delphi 7,它是一個預編碼的Delphi。所以,你必須做這樣的:
var
wc: WideChar;
....
wc := WideChar(2192);
現在,這可能全部是無濟於事的,因爲你這聽起來有點像你的代碼正在與8位ANSI文本。在這種情況下,該字符不能用任何8位ANSI字符集編碼。如果您確實必須使用該字符,則需要使用Unicode文本。
您不能直接使用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字符的單字符表示不會在你的數據在其他地方發生。
爲什麼數據是UTF-8? Office使用UTF-16。 –
那好吧。我使用的是Delphi 7,所以我嘗試了WideChar(2192)。但我的功能確實需要一個Char,而不是WideChar。無論如何要將這個向右箭頭作爲char? – Chucky
你有一個方形釘和一個圓孔。該字符不存在於8位ANSI編碼中。想想看。 8位ANSI中只有256個字符可用。 –
我幫你。我面臨的問題是TStringList的分隔符字段只接受字符。我不知道如何解決這個問題,因爲我正在處理的數據默認是向右箭頭。未完待續。 – Chucky