我正在寫一個應該在屏幕上顯示☻字符的小程序。該方案如下:簡單的C程序沒有給出預期的輸出
#include <stdio.h>
main()
{
printf("☻\n");
}
然而,當我運行這個程序,我得到的
Γÿ║
輸出爲什麼會出現這樣的輸出,並且我應該怎麼做才能輸出我想?
我正在寫一個應該在屏幕上顯示☻字符的小程序。該方案如下:簡單的C程序沒有給出預期的輸出
#include <stdio.h>
main()
{
printf("☻\n");
}
然而,當我運行這個程序,我得到的
Γÿ║
輸出爲什麼會出現這樣的輸出,並且我應該怎麼做才能輸出我想?
你得到的是因爲你使用的任何終端程序都不兼容某些Unicode編碼。
例如,我的Debian盒子編譯細,它實際上打印出笑臉,因爲gnome-terminal
是:-)
,你所看到的三個字符,而不是一個事實一個該死的罰款的軟件是一個很好的指示,它正在輸出UTF-8。事實上,如果我在我的Debian框運行該程序,並捕獲的二進制輸出和od -xcb
,我看到:
0000000 98e2 0abb
342 230 273 \n
342 230 273 012
0000004
顯示其是出來的UTF-8,它只是gnome-terminal
是足夠聰明把它變回正確的字形。
的這些字節轉換成二進制如下:
e2 98 bb
1110 0010 : 1001 1000 : 1011 1011
,並使用這個優秀的答案here,說明開始10
該位模式連續字節,我們可以按照如下對其進行解碼:
U+000800-U+00ffff 1110yyyy yyyyyyyy xxxxxxxx
10yyyyxx
10xxxxxx
e2 98 bb
1110 0010 : 1001 1000 : 1011 1011
yyyy yy yyxx xx xxxx
因此,代碼點是0010 0110 : 0011 1011
,相當於263b
,這完全沒有巧合,是black smiling face character。
在固定的視窗顯示不正確的Unicode,通過您的評論指示的問題的方面:
我在Windows命令提示符。我應該如何使cmd.exe與unicode一起使用?
你可能想看看this question,特別是回答有關使用chcp
將代碼頁更改爲65001(UTF-8)。注意我沒有測試過這個,我只是把它作爲一個指針提供給你。
我在Windows命令提示符下。我應該如何使cmd.exe與unicode一起使用? – user2532642
@ user2532642:所以不讓我給你一個鏈接「讓我谷歌爲你」:-( –
#include <fcntl.h>
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L"☻\n");
瓦爾特
它工作在我的終端(默認爲UTF-8)。 – Emmet
您生成的代碼超過127.不在127下。 – PersianGulf