【发布时间】:2014-10-27 21:28:19
【问题描述】:
上下文
Debian 64 位 尝试将 int,例如 233 写入文件并使其文本打印“é”。
问题
我无法理解如何编写一个 utf8 等效字符,例如“é”或任何 UTF-8 字符,其宽度远远超过字符类型所能包含的范围。该文件应该是人类可读的,以便通过网络发送。
我的目标是将 int 写入文件并获取其等效的 utf8。
我不知道我在做什么。
代码
FILE * dd = fopen("/myfile.txt","w");
fprintf(dd, "%s", 233); /* The file should print "é" */
fclose(dd);
谢谢
更新:
根据 Biffen 的评论,这是另一段写“E9”(“é”的十六进制值)的代码;
int p = 233;
char r[5];
sprintf(r,"%x",p);
printf("%s\n",r);
fwrite(r,1,strlen(r),dd);
fclose(dd);
如何将其转换为“é”?
更新最终工作代码:
UFILE * dd = u_fopen("/myfile.txt","wb", NULL, NULL);
UChar32 c = 233;
u_fputc(c,dd);
u_fclose(dd);
【问题讨论】:
-
字符
é需要两个 UTF-8 单元进行编码(0xC3、0xA9)。为什么不直接使用带有escape sequence 的字符串文字,例如"\u00E9"? -
...而
fprintf()将不起作用,因为%s需要一个字符指针,并且您要打印的内容不太可能位于内存地址233 . 你是否启用编译器警告? -
我更新了问题,使其比评论更清晰。现在,我得到了 E9 的东西,但是如何将它写入文件以获得“é”?