簡體   English   中英

帶有部分符號的舊版proc C / C ++代碼(§)

[英]Legacy proc C/C++ code with sectional symbol(§)

我正在維護一個遺留的oracle proc C/C++代碼,該代碼正在處理文本文件並更新DB 在代碼中,他們正在准備一個SELECT語句,看起來像這樣

SELECT 'ERROR_ID=§' || ERROR_ID ||  '§'  || ' AND ' ...

執行select語句后,它們將在char數組中獲取如下所示的數據。

ERROR_ID=§ASI:10§ AND 

之后,他們用單引號替換了截面符號(§),如下所示

if((char)file_str.arr[k]=='§')                    
{                                                 
    strncpy((char*)&file_str.arr[k],"'",1);         
} 

基本上,他們是從數據庫中獲取主鍵(舊的主鍵)並比較文本文件中存在的主鍵(新鍵)。 他們使用簡單的strcmp來比較這些主鍵。

現在我遇到了一個問題。 即使新舊主鍵匹配,如果我查看日志文件,這些問號也會出現,而不是單引號。

ERROR_ID=?ASI:10? AND FORM_ID=?064956?  - old key
ERROR_ID='ASI:10' AND FORM_ID='064956'  - new key

我猜想,因為他們在代碼中使用了non ASCII charsectional symbol(§) ,所以它失敗了。

請提出建議。

更新:相同的二進制文件部署在不同的環境中。 在某些環境中,部分符號(§)被替換為'?'。 標記,並且在某些情況下可以正常工作。 問題:是否有任何環境設置對此產生影響? 如果是,我應該尋找什么。

所有環境上的OS都是: SunOS 5.10

您的可執行文件可能未設置任何語言環境。 因此,您的程序將根據環境設置的語言環境運行。 我建議例如從代碼內部設置語言環境:setlocale(LC_ALL,“ C”); 在其他任何事情運行之前。

我認為這種方法是不正確的。 我想你應該

  1. 閱讀文本文件,翻譯為wchar_t,以確保您具有正確的語言環境。 無論是固定寬度字符集(字節的代碼頁,UCS-2)還是多字節字符集(UTF-8,其他),您都將在wchar_t中使用固定寬度字符集。
  2. 將SQL構造為wstring。 現在,無論輸入文件如何,“§”都應該正確。
  3. 執行SQL。

暫無
暫無

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

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