簡體   English   中英

Delphi 2007和XE3中的差分函數Char / Chr

[英]Difference function Char / Chr in Delphi 2007 and XE3

我正在使用帶有參數130的Char和Chr函數,並且在Delphi 2007 e XE3中的行為有所不同。

Delphi 2007:Char(130)或Chr(130) - 結果:逗號

Delphi XE3:Char(130)或Chr(130)-結果:#$ 0082

我使用AnsiChar解決問題(130)。

我的問題是如果我在使用AnsiChar時遇到問題。 我應該在整個項目中通過AnsiChar更改Chr / Char嗎?

謝謝

這兩個稍有不同:

  • Char(130)是值類型轉換而不是函數調用。 值為130的整數將轉換為具有該序數的Char
  • Chr(130)確實是一個函數調用。 它調用內部函數Chr()

在Delphi的Unicode之前和之后版本中,您可以互換使用Char()Chr()版本。 但是,結果因您使用的Delphi版本而異。

對於Unicode前Delphi, Char是一個8位ANSI字符。 對於后Unicode Delphi, Char是一個16位UTF-16字符。

確切的解決方法取決於您要實現的目標。 如果你想把頭埋在沙子里,並假裝不存在Unicode字符,那么也許你想用AnsiChar替換你對Char所有使用。 而且,您還希望希望您的程序只能在具有將字符130映射到該字符的語言環境的計算機上運行。 請注意,並非所有Windows ANSI語言環境都這樣做。

但是,我懷疑對問題的正確解決方案,無論是什么,都將采用Unicode,並對該字符使用UTF-16編碼。 這是單低-9報價標記U + 201A 在Unicode Delphi中這樣寫:

Chr($201A)

或者像這樣:

#$201A

或者像這樣:

'‚'

另一方面,也許你真的想要一個逗號,注意AnsiChar(130)不是逗號,但實際上是一個引號。

如果你想要一個逗號( COMMA U + 002C ),這很容易:

Chr($002C)

要么

#$002C

要么

','

一些需要閱讀的內容: MarcoCantù的Delphi和Unicode

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM