utf-8编码文件转换成gb2312

terhack 2010-04-28 10:15:20
花了一天看了很多编码的知识,脑子还是一头雾水。
问题:
我这有个.c的utf-8编码的文件,中文显示是乱码,想把它在windows下都正确显示。
转什么格式?
我新建txt然后写入中文,另存为utf-8为什么中文还能正确显示啊?而那.c文件中的中文是乱码?
utf-8是unicode的一种传送方式?unicode字符集既然支持汉字,为什么utf-8还显示乱码。我的是windows环境。
那么把utf-8转成unicode,中文是不是就不显示乱码了?或者必须转成gb2312?
还有能不能给 出转换思路,要熟悉所有的编码方式才可以么?
看网上有用MultiByteToWideChar和WideCharToMultiByt着两个接口的哦,也搞不太懂
int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar
);
这接口是不是只能在MFC中使用(C++,MFC不太了解,windows编程也没学),?c的话可以用么?可以的话是不是只要把CodePage设为CP_ACP 当前系统ANSI代码页,
,字符就可以在windows下正确显示?那么把utf-8文件转成gb2312文件该怎么做?
很乱。。。希望得到一些指点
...全文
1459 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cattycat 2010-04-28
  • 打赏
  • 举报
回复
记事本显示utf正常是因为记事本文件支持utf编码。WideCharToMultiByte和MultiByteToWideChar这两个函数是Windos的API,只要#include <windows.h>就可以用了。
terhack 2010-04-28
  • 打赏
  • 举报
回复
记事本那个另存为编码格式的选择,改变文件编码格式了么?
比如把utf-8改为ansi编码格式,是不是里面的数据就改为ansi编码格式的数据了?
但是我把utf-8另存为ansi后,我读取文件前三个字符,发现还是0xEF 0xBB 0xBF,说明文件还是utf-8编码哦。
terhack 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hai040 的回复:]
如果要转换的话用notepad另存为就行
[/Quote]
自己写程序实现有什么方法么,实现另存为那个编码选择
bobo364 2010-04-28
  • 打赏
  • 举报
回复
原来是这问题,我还以为是要把gb2312转成utf-8哪
hai040 2010-04-28
  • 打赏
  • 举报
回复
vc高级点的版本也应该可以正常显示
terhack 2010-04-28
  • 打赏
  • 举报
回复
如果用记事本打开时里面中英文都正常,而编译后程序运行时在cmd里显示乱码,那是因为cmd认得gb2312不认得utf8。你将这个utf8另存成gb2312的就可以显示
是这个原因哦,终于明白些了,我想实现这个txt文件的另存为ansi编码该如何去做,自己写程序实现,输入一个文件,然后把这utf-8格式变为那个ansi编码
hai040 2010-04-28
  • 打赏
  • 举报
回复
如果要转换的话用notepad另存为就行
terhack 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lyramilk 的回复:]
WideCharToMultiByte是WinAPI,它是C格式的函数,可以在C语言中使用。

至于你说的那个.c文件,如果用记事本打开时里面英文正常,原本中文的地方出现乱码那说明文件可能是gb2312编码,被强制加上了utf8标识符才被误认为是utf8文件。

如果用记事本打开时里面中英文都正常,而编译后程序运行时在cmd里显示乱码,那是因为cmd认得gb2312不认得utf8。你将这个……
[/Quote]
我试试
terhack 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lyramilk 的回复:]
你可以尝试用winhex给它加上utf8标识符再用记事本打开。
[/Quote]
刚发现用记事本打开中文不是乱码的,但是vc下是乱码
windows支持utf-8显示?是因为编译器不支持还是什么原因?
terhack 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hai040 的回复:]
c文件用什么打开显示乱码
[/Quote]
DEV_C++,VC也是乱码
中文显示的是乱码,其他语言不是,但是用记事本打开.c的话就可以正确显示
怎么做才能让中文显示?
hai040 2010-04-28
  • 打赏
  • 举报
回复
c文件用什么打开显示乱码
lyramilk 2010-04-28
  • 打赏
  • 举报
回复
你可以尝试用winhex给它加上utf8标识符再用记事本打开。
lyramilk 2010-04-28
  • 打赏
  • 举报
回复
WideCharToMultiByte是WinAPI,它是C格式的函数,可以在C语言中使用。

至于你说的那个.c文件,如果用记事本打开时里面英文正常,原本中文的地方出现乱码那说明文件可能是gb2312编码,被强制加上了utf8标识符才被误认为是utf8文件。

如果用记事本打开时里面中英文都正常,而编译后程序运行时在cmd里显示乱码,那是因为cmd认得gb2312不认得utf8。你将这个utf8另存成gb2312的就可以显示了。

编译时的字符串是由文件中复制过去的,所以文件中什么编码那么这个字符串编译后还是什么编码,这就造成了utf8源码中编译的字符串都是utf8格式的中文。建议你可以使用\xff\xff这样的形式将你想表达的中文的gb2312编码写成16进制格式放在字符串中,这样编译后无论代码是什么编码字符串就都是gb2312的了。

当然,如果你想将utf8转换成gb2312再显示出来也可以。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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