簡體   English   中英

Scanf和printf返回不同的unicode字符

[英]Scanf and printf return different unicode characters

我需要制作一個讀寫希臘字母的程序。 由於希臘語不是ASCII,我將控制台語言環境設置為UTF-8。 我設法在這個多字節的混亂中使一些字符串工作,直到我到達我需要用戶輸入的部分

所以,生病只發布有問題的部分

while(1) {
    char inputc[50]; 
    memset(inputc,'\0',50);
    scanf("%s",inputc)
    printf("%s",inputc);
}

對於任何希臘字符,這將打印與輸入不同的內容。 另外,如果我做printf("%d",inputc[i]); 對於每個元素來獲取int值(對於希臘字母說是負數),我得到的值與從文字中讀取相同字符的值不同。

使用的命令是SetConsoleOutputCP(CP_UTF8);

這只影響stdout(printf)。 要設置stdin(scanf),您還需要SetConsoleCP(CP_UTF8) 如果您設置了一個而不是另一個,則輸入和輸出字符自然會有所不同。

但是,請注意,當設置為代碼頁65001 / CP_UTF8時,Windows控制台中存在嚴重錯誤(或者通常是任何沒有特殊支持的多字節代碼頁,即那些不是舊版語言環境的默認代碼頁)。 Windows在此狀態下報告字節數不正確,導致打印調用錯誤並重復輸出,並掃描掛起的調用。 這通常不是讓Windows程序與Unicode通信的可行方法。

暫無
暫無

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

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