2016-08-09 56 views
0

我想編譯項目編寫在德爾福2007參數 - 代碼頁:1252。在Windows 10的一臺機器上,一切正常,西班牙語字符串顯示正確。當我在Windows 8參數--codepage:1252的計算機上做同樣的事情時,沒有任何變化。 我需要這個,因爲在不工作的計算機上,我有團隊代理。 有沒有人有類似的問題?或者,可以在非Unicode應用程序中實現適當的西班牙字符顯示,而不必在需要重新啓動系統的windows屬性中對其進行更改,這對於teamcity服務器來說是有問題的。德爾菲2007編譯與代碼頁參數和teamcity

編輯:

在兩臺計算機上我已經設置波蘭語的非Unicode應用程序和:

  1. 的Windows 10 - 西班牙字符編譯EXE文件複製到西班牙的PC並沒有西班牙語字符。
  2. Windows 10 - 用西班牙字符編碼和--codepage:1252在dproj「1252」中設置參數,將exe文件複製到西班牙PC和西班牙文字符顯示正確。
  3. Windows 10 - 使用dcc32.exe在命令行中編譯帶西班牙字符和--codepage:1252參數,將exe文件複製到西班牙PC和西班牙文字符中,沒有西班牙字符。
  4. Windows 8 - 用西班牙字符編譯,將exe文件複製到西班牙語PC,並且沒有西班牙字符。
  5. Windows 8 - 用西班牙字符和--codepage:1252參數編譯,將exe文件複製到西班牙語PC中,並且沒有西班牙字符。

編譯通過Delphi和使用dcc32.exe它們應該是相同的輸出,因爲Delphi使用dcc32以相同的方式,我可以看到它在輸出中有什麼區別。

UPDATE:

更多的測試後,我的結論是: 德爾福IDE與編譯「--codepage:1252」與所有文件都ANSI格式它的工作。當我更改爲UTF-8不會工作。 從命令行不能在任何情況下和組合。

回答

0

您可以在計算機上正常工作的地方將文件格式更改爲UTF-8並保存(我不確定是否可以自動爲項目中的所有文件執行此操作)它的代碼頁的任何一臺電腦上工作,而不管。

要更改文件格式,使用編輯器窗口的上下文菜單。

+0

當我所有的文件都有ANSI格式西班牙語字符正確時,我改變爲UTF-8我失去了它。 –

+0

然後我出於想法,對不起。 – dummzeuch

+0

將源文件編碼設置爲UTF-8,然後在運行時使用'UTF8Decode()'將字符串文字傳遞給'AnsiString'變量/屬性。這將執行從UTF-8到OS當前使用的任何ANSI代碼頁的轉換。 –

1

德爾福2007年是德爾福的最後一個版本仍然使用基於ANSI-RTL/VCL。本地GUI組件使用操作系統默認的Ansi代碼頁,因此源代碼是用Latin1/Spanish編碼的(這就是--codepage:1252參數告訴編譯器)如果您的GUI無法在非西班牙語機器上正確顯示西班牙語數據。

正如dummzeuch提到的,您的源代碼應該保存爲UTF-8而不是Latin1/Spanish。但是,如果您想要在運行時從基於Ansi的可執行文件中顯示Unicode數據,則必須將數據轉換爲Unicode並使用第三方Unicode GUI組件,例如TNT Unicode controls。另見Handling a Unicode String in Delphi Versions <= 2007。否則,請咬緊牙關,升級到Delphi 2009或更高版本,它們使用基於Unicode的本機基於Unicode的RTL/VCL。德爾福自2008年以來一直是完全Unicode產品,現在是放棄ANSI的時候了。

+0

但是,當我從Delphi進行編譯並且在dproj文件中具有 1252參數時,它起作用。我在波蘭語PC上編譯西班牙語版本。 當我通過命令行中的參數-codepage:1252執行dcc32.exe時,沒有西班牙字符。 –

+0

'DCC_CodePage'和'--codepage'只適用於源代碼本身的編碼。它們對已編譯應用程序的運行時行爲沒有影響。無論您在源代碼中靜態定義的任何數據將在運行時使用操作系統代碼頁進行解釋*,因爲您正在使用仍基於「AnsiString」和基於ANSI的API的Delphi版本。如果您的應用程序在使用不同語言的多臺機器上運行,則必須在運行時從一個代碼頁執行數據轉換,或者完全脫離ANSI並使用Unicode代替。 –