C Linux中的printf()/fprintf()问题,UTF-8编码

C Linux中的printf()/fprintf()问题,UTF-8编码,c,linux,utf-8,printf,C,Linux,Utf 8,Printf,因此,我运行以下代码: #include <stdio.h> #include <stdlib.h> int main() { system("chcp 1252 > nul"); // makes system accept latin characters int i = 0; for(i = 0; i < 256; i++){ printf("%i:\t%c\n", i, (char)i); }

因此,我运行以下代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    system("chcp 1252 > nul"); // makes system accept latin characters
    int i = 0;
    for(i = 0; i < 256; i++){
        printf("%i:\t%c\n", i, (char)i);
    }
    return 0;
}
我错过了什么。。必须有办法做到这一点。到目前为止,我已经尝试了许多解决方案,其中之一是:

...
#include <locale.h>

int main()
{
    setlocale(LC_ALL,"portuguese");
    ...
}

非常感谢您的帮助。

printf%c
不能用于生成UTF8输出。它只输出单字节ASCII码。UTF8仅对映射到ASCII的前128个字符为单字节。之后,UTF8是每个字符的多字节

有关使用宽字符生成非ASCII字符的方法,请参见此答案


您可以尝试以下方式运行程序:(从终端提示符)(chcp 1253;mypgm;)这将设置mypgm执行期间的代码页,因为两个可执行文件在子shell中执行,当子shell退出时,代码页将恢复正常文本编辑器错误检测到文件的编码(gedit?),它实际上有正确的内容,其他文本编辑器应该显示正确的内容。
...
#include <locale.h>

int main()
{
    setlocale(LC_ALL,"portuguese");
    ...
}
#include <locale.h>
#include <wchar.h>

int main(){
    setlocale(LC_ALL,"");

    wint_t index = 0;

    FILE* fpinout = fopen("UTF-8.txt","w");
    for(index = 0; index < 0x200; index++){
        printf("%i:\t%lc\n", index, index); //works fine, prints utf-8 chars to terminal
        fprintf(fpinout,"%i\t%lc", index, index); //does not work, output is wierd
    }
    fclose(fpinout);
}
र㄀ĉल㌂̉ऴ㔄ԉश㜆܉स㤈उ〱ਉㄱଉ㈱ఉ㌱ഉ㐱ฉ㔱༉㘱ဉ㜱ᄉ㠱ሉ㤱ጉ〲ᐉㄲᔉ㈲ᘉ㌲ᜉ㐲᠉㔲ᤉ㘲ᨉ㜲ᬉ㠲ᰉ㤲ᴉ〳ḉㄳἉ㈳ ㌳℉㐳∉㔳⌉㘳␉㜳
┉㠳☉㤳✉〴⠉ㄴ⤉㈴⨉㌴⬉㐴Ⰹ㔴ⴉ㘴⸉㜴⼉㠴〉㤴ㄉ〵㈉ㄵ㌉㈵㐉㌵㔉㐵㘉㔵㜉㘵㠉㜵㤉㠵㨉㤵㬉〶㰉ㄶ㴉㈶㸉㌶㼉㐶䀉㔶䄉㘶䈉
㜶䌉㠶䐉㤶䔉〷䘉ㄷ䜉㈷䠉㌷䤉㐷䨉㔷䬉㘷䰉㜷䴉㠷三㤷伉〸倉ㄸ儉㈸刉㌸匉㐸吉㔸唉㘸嘉㜸圉㠸堉㤸変〹娉ㄹ嬉㈹尉㌹崉㐹帉
㔹弉㘹怉㜹愉㠹戉㤹按〱रㅤ㄰攉〱लㅦ㌰有〱ऴㅨ㔰椉〱शㅪ㜰欉〱सㅬ㤰洉ㄱरㅮㄱ漉ㄱलㅰ㌱焉ㄱऴㅲ㔱猉ㄱशㅴ㜱甉ㄱसㅶ㤱眉
㈱रㅸㄲ礉㈱लㅺ㌲笉㈱ऴㅼ㔲紉㈱शㅾ㜲缉㈱स胂㈱ह臂㌱र苂㌱ऱ菂㌱ल蓂㌱ळ藂㌱ऴ蛂㌱व蟂㌱श裂㌱ष观㌱स諂㌱ह诂㐱र賂㐱ऱ跂㐱ल軂㐱
ळ迂㐱ऴ郂㐱व釂㐱श鋂㐱ष鏂㐱स铂㐱ह闂㔱र雂㔱ऱ韂㔱ल飂㔱ळ駂㔱ऴ髂㔱व鯂㔱श鳂㔱ष鷂㔱स黂㔱ह鿂㘱रꃂ㘱ऱꇂ㘱लꋂ㘱ळꏂ㘱ऴ꓂
㘱वꗂ㘱शꛂ㘱षꟂ㘱सꣂ㘱ह꧂㜱रꫂ㜱ऱꯂ㜱ल곂㜱ळ귂㜱ऴ껂㜱व꿂㜱श냂㜱ष뇂㜱स닂㜱ह돂㠱र듂㠱ऱ뗂㠱ल뛂㠱ळ럂㠱ऴ룂㠱व맂㠱श뫂
㠱ष믂㠱स볂㠱ह뷂㤱र뻂㤱ऱ뿂㤱ल胃㤱ळ臃㤱ऴ苃㤱व菃㤱श蓃㤱ष藃㤱स蛃㤱ह蟃〲र裃〲ऱ觃〲ल諃〲ळ诃〲ऴ賃〲व跃〲श軃〲ष迃〲स郃〲ह
釃ㄲर鋃ㄲऱ鏃ㄲल铃ㄲळ闃ㄲऴ雃ㄲव韃ㄲश飃ㄲष駃ㄲस髃ㄲह鯃㈲र鳃㈲ऱ鷃㈲ल黃㈲ळ鿃㈲ऴꃃ㈲वꇃ㈲शꋃ㈲षꏃ㈲स꓃㈲हꗃ㌲रꛃ㌲ऱꟃ㌲
लꣃ㌲ळ꧃㌲ऴ꫃㌲वꯃ㌲श곃㌲ष귃㌲स껃㌲ह꿃㐲र냃㐲ऱ뇃㐲ल닃㐲ळ돃㐲ऴ듃㐲व뗃㐲श뛃㐲ष럃㐲स룃㐲ह맃㔲र뫃㔲ऱ믃㔲ल볃㔲ळ뷃㔲ऴ뻃
㔲व뿃