我使用Delphi函數什麼是代碼頁0?
StringCodePage
我把它由一個COM函數返回一個字符串(譯註的Acrobat getContents - 看到我的其他職位),並返回0
什麼是0?安思?
我使用Delphi函數什麼是代碼頁0?
StringCodePage
我把它由一個COM函數返回一個字符串(譯註的Acrobat getContents - 看到我的其他職位),並返回0
什麼是0?安思?
代碼頁0是CP_ACP,即當前的Windows ANSI代碼頁。
從Windows.pas:
{$EXTERNALSYM CP_ACP}
CP_ACP = 0; { default to ANSI code page }
從MSDN:
CP_ACP
當前系統的Windows ANSI代碼頁。即使在同一個網絡上,這個值在不同的 計算機上也可能不同。它可以在同一臺計算機上更改,導致存儲的數據無法恢復損壞。該值僅用於暫時使用 ,如果可能,應使用UTF-16或UTF-8進行永久存儲。
的唯一途徑StringCodePage()
可以返回0,如果你傳遞一個空白AnsiString
,從而恢復其編譯時的代碼頁親和力,或傳遞一個非空AnsiString
有分配給它的有效載荷代碼頁0。 Delphi使用WideString
作爲COM字符串,而StringCodePage()
對於除了普通AnsiString
之外的任何字符串類型都不會返回0。在D2009中,RTL在將操作系統的實際運行時代碼頁存儲到AnsiString
有效負載中做得並不出色,因此它們通常包含編譯時代碼頁的親和性0.這對於字符串轉換而言是功能性的,但它不是非常明確。這在以後的Delphi版本中得到修復,因此AnsiString
有效載荷現在包含在運行時確定的實際操作系統代碼頁。
`StringCodePage()`返回0的唯一方法是,如果你傳遞一個空的`AnsiString`給它,或者在它的有效載荷中有一個非空白的`AnsiString`代碼頁。 Delphi對COM字符串使用`WideString`。在D2009中,RTL並沒有將實際的代碼頁值存儲到`AnsiString`有效負載中做得非常好,所以它通常具有0,因爲這是編譯時代碼頁的親和性,而不是運行時親和性。這在後來的Delphi版本中得到了修復。 – 2012-07-05 09:27:39