[英]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 char
的sectional symbol(§)
,所以它失敗了。
請提出建議。
更新:相同的二進制文件部署在不同的環境中。 在某些環境中,部分符號(§)被替換為'?'。 標記,並且在某些情況下可以正常工作。 問題:是否有任何環境設置對此產生影響? 如果是,我應該尋找什么。
所有環境上的OS都是: SunOS 5.10
您的可執行文件可能未設置任何語言環境。 因此,您的程序將根據環境設置的語言環境運行。 我建議例如從代碼內部設置語言環境:setlocale(LC_ALL,“ C”); 在其他任何事情運行之前。
我認為這種方法是不正確的。 我想你應該
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.