C语言读写文件的时候怎么控制字符编码方式?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言读写文件的时候怎么控制字符编码方式?相关的知识,希望对你有一定的参考价值。

C语言读写文件的时候怎么控制字符编码方式 我是SJIS转UTF-8的
有明白的请给下提示?就是读写的时候控制一下,以UTF-8的编码方式读写文件。

    C语言读写文件有两种方式: 一种是文本方式,另一种是2进制方式。日文,中文,unicode, 都要用2进制方式。文件内容的编码和编码的转化,同一种编码的大端或小端编码,都要自己安排处理。

    C语言不管读写都要通过fopen函数来,其中mode参数可以控制以二进制打开还是以文本方式打开。
    fopen的函数原型:FILE * fopen(const char * path,const char * mode);
    fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
      r 以只读方式打开文件,该文件必须存在。
      r+ 以可读写方式打开文件,该文件必须存在。
      rb+ 读写打开一个二进制文件,允许读数据。
      rw+ 读写打开一个文本文件,允许读和写。
      w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
      w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
      a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
      a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
      wb 只写打开或新建一个二进制文件;只允许写数据。
      wb+ 读写打开或建立一个二进制文件,允许读和写。
      wt+ 读写打开或着建立一个文本文件;允许读写。
      at+ 读写打开一个文本文件,允许读或在文本末追加数据。
      ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
      上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。

参考技术A C语言读写文件 一种是文本方式,另一种是2进制方式。日文,中文,unicode, 都要用2进制方式。文件内容 的编码 和编码的转化,同一种编码的大端或小端编码,都要自己安排处理。

(1)用2进制方式打开文件
(2)读/写 UTF-8的编码文件 开头
有3 个特殊字节,数值是16进制: EF BB BF
(3)UCS 编码(16进制) 的 UTF-8 字节流(二进制) :
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
010000 -- 1FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
按此转换,用fwrite() 输出字节流。
或按字节 fread() 读入,判断高位,决定连读2个还是3个4个字节,译为 UCS
参考技术B 这个程序可能是最简单的mp3播放器了。当然也谈不上什么功能。但是确实能播放。
链接时要指定库文件。VC++是vfw32.lib, GCC是libvfw32.a.
我在VC6.0和GCC/MinGW 3.3.1下都通过了。
假设程序名是MyPlay, 目录下还有一个aaa.mp3, 运行MyPlay aaa.mp3即可。
注意Sleep(50000)是让他最多播放50秒。没有Sleep()的话,窗口一闪就退出了。
具体的MCI函数请查有关资料。

#include <windows.h>
#include <vfw.h>

int main(int argc, char* argv[])

if (argc>1)
HWND MyPlayer = MCIWndCreate(NULL,GetModuleHandle(NULL), 0, argv[1]);
MCIWndPlay(MyPlayer);
Sleep(50000);

return 0;

这个程序还可以播放MIDI, AVI, WMV, MPG等影音文件。
如果只是后台播放MIDI或MP3,不想显示那个没有用的窗口,把MCIWndCreate()第三个参数0改成WS_POPUP即可。
如果想精确控制Sleep()至MP3播放结束,可以改成 Sleep(MCIWndGetLength(MyPlayer));

对于mp3, MCIWndGetLength()返回值的单位是毫秒,可以直接用于Sleep()延时。
对于mpg, MCIWndGetLength()返回值的单位是帧数,还要转换成毫秒才能用于Sleep().
具体MCIWndGetLength()返回值的单位是什么,可以调用MCIWndGetTimeFormat()来查询。

>是C,不是C++ 更不是Vc++
你误解了。VC6.0不只是支持C++, 也支持C. GCC更是C编译器,不是C++编译器。
这个程序是地地道道的C程序,没有一丁点儿 C++ 的成分。但是他调用了Windows API函数,所以必须用支持Windows编程的32位C编译器,不一定用VC或GCC。
很多人认为,刚学C语言最好用GCC或VC的命令行方式,但遗憾的大多教学用的C环境仍然选用20多年前的TC。如果坚持用16位的TC可以做一些事情,但在现在绝大多数事情是他做不到的。
参考技术C 格式化输出方式是文本格式某人的是 UTF-8

c语言 怎么读文件中的汉字

怎么用c语言从一个.dat文件中读取汉字~~急呀

  字符读写函数fgetc和fputc
  字符读写函数是以字符(字节)为单位的读写函数。 每次可从文件读出或向文件写入一个字符。

  1) 读字符函数fgetc
  fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:
  字符变量=fgetc(文件指针);
  例如:
  ch=fgetc(fp);
  其意义是从打开的文件fp中读取一个字符并送入ch中。

  对于fgetc函数的使用有以下几点说明:
  在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。
  读取字符的结果也可以不向字符变量赋值。例如:fgetc(fp); 但是读出的字符不能保存。
  在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc 函数后,该位置指针将向后移动一个字节。 因此可连续多次使用fgetc函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。

  【例13-1】读入文件c1.doc,在屏幕上输出。#include<stdio.h>main() FILE *fp; char ch; if((fp=fopen("d:\\\\jrzh\\\\example\\\\c1.txt","rt"))==NULL) printf("\\nCannot open file strike any key exit!"); getch(); exit(1); ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); fclose(fp);
  本例程序的功能是从文件中逐个读取字符,在屏幕上显示。程序定义了文件指针fp,以读文本文件方式打开文件“d:\\\\jrzh\\\\example\\\\ex1_1.c”,并使fp指向该文件。如打开文件出错,给出提示并退出程序。程序第10行先读出一个字符,然后进入循环,只要读出的字符不是文件结束标志(每个文件末有一结束标志EOF)就把该字符显示在屏幕上,再读入下一字符。每读一次,文件内部的位置指针向后移动一个字符,文件结束时,该指针指向EOF。执行本程序将显示整个文件。

  2) 写字符函数fputc
  fputc函数的功能是把一个字符写入指定的文件中。函数调用的形式为:
  fputc( 字符量, 文件指针 );
  其中,待写入的字符量可以是字符常量或变量,例如:
  fputc(\'a\',fp);
  其意义是把字符a写入fp所指向的文件中。

  对于fputc函数的使用也要说明几点:

  被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。
  每写入一个字符,文件内部位置指针向后移动一个字节。
  fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。
参考技术A FILE *fp;
double dbnum[100];
fp = fopen("a.dat", "r");
if(fp != NULL)
for(int i = 0; i < 100; i++)

if(!scanf("%f", &num[i]))

break;
参考技术B 关键是你读取了怎么用啊

以上是关于C语言读写文件的时候怎么控制字符编码方式?的主要内容,如果未能解决你的问题,请参考以下文章

如何用C语言读写文件

c语言 怎么读文件中的汉字

C语言 | 文件位置标记

C 语言文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )

在c语言中怎样打开一个文本文档

12:字符串加密、解密