相关疑难解决方法(0)

C中的宽字符输入/输出是否始终读取/写入正确的(系统默认)编码?

我主要对类Unix系统(例如便携式POSIX)感兴趣,因为看起来Windows对于广泛的字符做了奇怪的事情.

读取和写入宽字符函数(例如getwchar()putwchar())总是"做正确的事",例如从utf-8读取并在设置区域设置时写入utf-8,或者我是否必须手动调用wcrtomb()和打印使用例如字符串fputs()?在我的系统(openSUSE 12.3)中$LANG设置为en_GB.UTF-8它们似乎做了正确的事情(检查输出我看到看起来像UTF-8,即使字符串是使用wchar_t存储并使用宽字符函数编写的).

但我不确定这是否有保证.例如cprogramming.com声明:

[宽字符]不应该用于输出,因为虚假零字节和其他具有共同含义的低ASCII字符(例如'/'和'\n')可能会散布在整个数据中.

这似乎表明输出宽字符(大概使用宽字符输出功能)可能会造成严重破坏.

由于C标准似乎根本没有提及编码,因此在使用wchar_t时我真的不知道是谁/何时/如何应用编码.所以我的问题基本上是当我的应用程序不需要知道所使用的编码时,如果只读取,编写和使用宽字符是正确的事情.我只需要字符串长度和控制台宽度(wcswidth()),所以在处理文本时使用wchar_t到处都是理想的.

c linux posix wchar-t

8
推荐指数
2
解决办法
2189
查看次数

如何在C中读/写UTF8文本文件?

我试图从文本文件中读取UTF8文本,然后将其中一些文本打印到另一个文件.我正在使用Linux和gcc编译器.这是我正在使用的代码:

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

int main(){
    FILE *fin;
    FILE *fout;
    int character;
    fin=fopen("in.txt", "r");
    fout=fopen("out.txt","w");
    while((character=fgetc(fin))!=EOF){
        putchar(character); // It displays the right character (UTF8) in the terminal
        fprintf(fout,"%c ",character); // It displays weird characters in the file
    }
    fclose(fin);
    fclose(fout);
    printf("\nFile has been created...\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它现在适用于英文字符.

c linux gcc utf-8

3
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×2

linux ×2

gcc ×1

posix ×1

utf-8 ×1

wchar-t ×1