nul"); // makes system accept -6ren">
gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:57 24 4
gpt4 key购买 nike

所以我正在运行这段代码:

#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;
}

这将扩展的 ascii 表中的所有字符打印到控制台窗口。

我现在用的是linux,希望能达到同样的效果。我知道 linux 不使用扩展的 ASCII 表。因此,我已确保文件已编码为 UTF-8,这以前对我有用。我正在使用 code::blocks 运行控制台应用程序到 gnome 终端,也设置为 UTF-8。但是我的输出不是我所期望的:

33: !
34: "
35: #
36: $
37: %
38: &
39: '
40: (
41: )
42: *
43: +
...
69: E
70: F
71: G
72: H
73: I
...
103: g
104: h
105: i
106: j
107: k
108: l
...
127:
128: �
129: �
...
254: �
255: �

我在这里错过了什么......必须有办法做到这一点。到目前为止,我已经尝试了很多解决方案,其中之一是:

...
#include <locale.h>

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

但是到目前为止,这并没有用。感谢任何帮助

编辑 1:好的!我必须将 UTF-8 编码的字符打印到终端。但是打印到文件并没有像我预期的那样工作。像这样使用 wchar.h 和 locale.h:

#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);
}

我尝试将索引用作 wint_t 和 wchar_t。我的 UTF-8.txt 文件如下所示:

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

感谢任何帮助。

最佳答案

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

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

How to iterate through unicode characters and print them on the screen with printf in C?

关于c - Linux 中的 printf()/fprintf() 问题,UTF-8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26533528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com