C++不能处理UTF-8的编码,怎样批量转成ANSI编码

时间:2023-01-05 10:33:12
    我要用C++处理多个文本文件,里面的字母和数字都是正常的,但中文部分读进来就是乱码了,后来发现应该是编码格式的问题,如果把原来的文本文件打开后另存为时选择编码为ANSI编码,再去处理的话就正常了。

    但现在有一个问题,如果一个文件的话还好说我手动就转过来了,但我要处理上百个文件,想用程序去实现批量转换,不知道该怎么做呢?

8 个解决方案

#1


open 的时候用 css 表示编码. (仅限 windows)

fopen("newfile.txt", "rw, ccs=UTF-8");

#2


可以用MultiByteToWideChar和WideCharToMultiByte转

#3


用locale进行字符集转换,参考http://bigwhite.blogbus.com/logs/143108551.html

引用 楼主 Sad_Sugar 的回复:
    我要用C++处理多个文本文件,里面的字母和数字都是正常的,但中文部分读进来就是乱码了,后来发现应该是编码格式的问题,如果把原来的文本文件打开后另存为时选择编码为ANSI编码,再去处理的话就正常了。

    但现在有一个问题,如果一个文件的话还好说我手动就转过来了,但我要处理上百个文件,想用程序去实现批量转换,不知道该怎么做呢?

#4


引用 1 楼 adlay 的回复:
open 的时候用 css 表示编码. (仅限 windows)

fopen("newfile.txt", "rw, ccs=UTF-8");

我在网上也见过类似的用法,但我在VC6下面或者VS2010下面这样写,就会出错,貌似违反了某个assertion,说没有响应的模式。我是32位Windows7啊,不知道哪个设置不对?

#5


引用 2 楼 kusanagiya 的回复:
可以用MultiByteToWideChar和WideCharToMultiByte转

我还不太会用,是调用WindowsAPI么?我没接触过啊……小菜一枚,不过还是谢谢!

#6


引用 3 楼 turingo 的回复:
用locale进行字符集转换,参考http://bigwhite.blogbus.com/logs/143108551.html

Quote: 引用 楼主 Sad_Sugar 的回复:

    我要用C++处理多个文本文件,里面的字母和数字都是正常的,但中文部分读进来就是乱码了,后来发现应该是编码格式的问题,如果把原来的文本文件打开后另存为时选择编码为ANSI编码,再去处理的话就正常了。

    但现在有一个问题,如果一个文件的话还好说我手动就转过来了,但我要处理上百个文件,想用程序去实现批量转换,不知道该怎么做呢?

谢谢!好多啊,我仔细看看...

#7


引用 5 楼 Sad_Sugar 的回复:
Quote: 引用 2 楼 kusanagiya 的回复:

可以用MultiByteToWideChar和WideCharToMultiByte转

我还不太会用,是调用WindowsAPI么?我没接触过啊……小菜一枚,不过还是谢谢!


或者你看看这个呢
http://blog.csdn.net/segen_jaa/article/details/7550317

#8


多谢各位!问题以解决,因为字符集的编码实在太复杂了,觉得现在一时半会儿还弄不懂,在网上找到了一个很方便的转码软件,convertz,已经把文件批量转码了,谢谢大家!

#1


open 的时候用 css 表示编码. (仅限 windows)

fopen("newfile.txt", "rw, ccs=UTF-8");

#2


可以用MultiByteToWideChar和WideCharToMultiByte转

#3


用locale进行字符集转换,参考http://bigwhite.blogbus.com/logs/143108551.html

引用 楼主 Sad_Sugar 的回复:
    我要用C++处理多个文本文件,里面的字母和数字都是正常的,但中文部分读进来就是乱码了,后来发现应该是编码格式的问题,如果把原来的文本文件打开后另存为时选择编码为ANSI编码,再去处理的话就正常了。

    但现在有一个问题,如果一个文件的话还好说我手动就转过来了,但我要处理上百个文件,想用程序去实现批量转换,不知道该怎么做呢?

#4


引用 1 楼 adlay 的回复:
open 的时候用 css 表示编码. (仅限 windows)

fopen("newfile.txt", "rw, ccs=UTF-8");

我在网上也见过类似的用法,但我在VC6下面或者VS2010下面这样写,就会出错,貌似违反了某个assertion,说没有响应的模式。我是32位Windows7啊,不知道哪个设置不对?

#5


引用 2 楼 kusanagiya 的回复:
可以用MultiByteToWideChar和WideCharToMultiByte转

我还不太会用,是调用WindowsAPI么?我没接触过啊……小菜一枚,不过还是谢谢!

#6


引用 3 楼 turingo 的回复:
用locale进行字符集转换,参考http://bigwhite.blogbus.com/logs/143108551.html

Quote: 引用 楼主 Sad_Sugar 的回复:

    我要用C++处理多个文本文件,里面的字母和数字都是正常的,但中文部分读进来就是乱码了,后来发现应该是编码格式的问题,如果把原来的文本文件打开后另存为时选择编码为ANSI编码,再去处理的话就正常了。

    但现在有一个问题,如果一个文件的话还好说我手动就转过来了,但我要处理上百个文件,想用程序去实现批量转换,不知道该怎么做呢?

谢谢!好多啊,我仔细看看...

#7


引用 5 楼 Sad_Sugar 的回复:
Quote: 引用 2 楼 kusanagiya 的回复:

可以用MultiByteToWideChar和WideCharToMultiByte转

我还不太会用,是调用WindowsAPI么?我没接触过啊……小菜一枚,不过还是谢谢!


或者你看看这个呢
http://blog.csdn.net/segen_jaa/article/details/7550317

#8


多谢各位!问题以解决,因为字符集的编码实在太复杂了,觉得现在一时半会儿还弄不懂,在网上找到了一个很方便的转码软件,convertz,已经把文件批量转码了,谢谢大家!