编码问题? 使用fprintf输出结果为application/octet-stream编码类型文件。

jovial__ 2011-06-08 04:40:18
为什么我用sprintf输出流到文件,使用file -i显示的文件类型是:application/octet-stream? iconv没法转换此类编码。

文件读入的内容是utf8格式的,使用

FILE *fin = fopen("../taiyu/get_content/sentence_thai", "r"); 读入


fprintf(fout, "%s\t%d\n", (it -> first).c_str(), it -> second); 输出

输出前加上utf8的标识头,结果也是一样。

为什么不是utf8格式的呢。

求解释。
...全文
541 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jovial__ 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qq120848369 的回复:]

读UTF-8文件,然后打开一个新文件,写入UTF-8文件头,写入读取到得内容,最终调用iconv转化文件格式.

是这样做么.
[/Quote]

嗯。 因为iconv不支持application,没法转。

实际上我纳闷的是,为什么文件一大,格式就变了。10000行输出时候,就是utf8,至于这个阈值是多少没测试。
qq120848369 2011-06-08
  • 打赏
  • 举报
回复
读UTF-8文件,然后打开一个新文件,写入UTF-8文件头,写入读取到得内容,最终调用iconv转化文件格式.

是这样做么.
jovial__ 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qq120848369 的回复:]

是不是先写上文件头,然后调用iconv转化文件,然后输出剩下文件就好了呢.
[/Quote]

和内容没有关系吧。
因为我查看输出来的文件,以utf8显示是正常的,也就是我从utf8文件中读入,而且做任何变化,sprintf输出到文件中。
jovial__ 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qq120848369 的回复:]

是不是先写上文件头,然后调用iconv转化文件,然后输出剩下文件就好了呢.
[/Quote]

什么意思?
qq120848369 2011-06-08
  • 打赏
  • 举报
回复
是不是先写上文件头,然后调用iconv转化文件,然后输出剩下文件就好了呢.
jovial__ 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qq120848369 的回复:]
LINUX下libiconv库可以替代WIN API.

你用char[]读入UTF-8,然后写到另一个文件里,这样木有什么问题.

写进去是UTF-8,file -i显示那句英语是什么意思...

iconv你是用在哪个文件上,从什么转到什么 .

[/Quote]

file -i是output mime type strings。
iconv是当然文件是作用在输出的文件上啊, 从application/application/octet-stream 到utf8转。因为iconv不支持前面编码类型。

刚测试了输出10000行输出,匪夷所思的是用file -i命令显示的是utf8,难道文件大点,会自动更改类型?
qq120848369 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jovial__ 的回复:]
引用 4 楼 qq120848369 的回复:

引用 2 楼 qq120848369 的回复:
C/C++ code
FILE *fin = fopen("../taiyu/get_content/sentence_thai", "r"); 读入


只读打开能写么?


不好意思,看错.

UTF-8不是UNICODE的存储编码么,你怎么直接打印ANSI进去了,应该是U……
[/Quote]

LINUX下libiconv库可以替代WIN API.

你用char[]读入UTF-8,然后写到另一个文件里,这样木有什么问题.

写进去是UTF-8,file -i显示那句英语是什么意思...

iconv你是用在哪个文件上,从什么转到什么 .
jovial__ 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qq120848369 的回复:]

引用 2 楼 qq120848369 的回复:
C/C++ code
FILE *fin = fopen("../taiyu/get_content/sentence_thai", "r"); 读入


只读打开能写么?


不好意思,看错.

UTF-8不是UNICODE的存储编码么,你怎么直接打印ANSI进去了,应该是UNICODE字符串widechartomultiby……
[/Quote]

我写进去的内容是utf8,而且console显示正常。就是不清楚为什么file -i出来不一样,所以也不能确保是不是里面的内容就是完全正确的。

另外是unix平台,widechartomultiby是win的api吧。
qq120848369 2011-06-08
  • 打赏
  • 举报
回复
给你个连接你应该就解决了:http://dark0729.blogbus.com/logs/51496111.html
qq120848369 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qq120848369 的回复:]
C/C++ code
FILE *fin = fopen("../taiyu/get_content/sentence_thai", "r"); 读入


只读打开能写么?
[/Quote]

不好意思,看错.

UTF-8不是UNICODE的存储编码么,你怎么直接打印ANSI进去了,应该是UNICODE字符串widechartomultibytes之后,先写入3字节的标记符,然后再把转化后的字符串写进去把.
jovial__ 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dizuo 的回复:]

http://bytes.com/topic/c/answers/638098-fprintf-not-saving-file-utf8
[/Quote]

这里面的方法不行。 和我一开始试的是一样的,只不过我用的char,刚改用unsigned char 报错。
qq120848369 2011-06-08
  • 打赏
  • 举报
回复
FILE *fin = fopen("../taiyu/get_content/sentence_thai", "r"); 读入


只读打开能写么?

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧