ifstream读取文件失败和乱码问题
来源:互联网 发布:android aop切面编程 编辑:程序博客网 时间:2024/06/06 12:50
ifstream读取文件失败往往是由于路径中包含中文字符而造成的,因为默认的ifstream对象无法识别出中文,从而导致路径解析乱码,无法找到文件而失败。
原理介绍:每个ifstream对象内部都包含一个locale变量,用来指定字符的解析、比较等所有相关规则。默认构造的locale变量,是以“C”规则(可以把它简单地看成是只识别英文字符的规则)来初始化的。所以只要你只读取全英文路径的文件及全英文的内容,是不会有问题的。而当我们需要读取中文路径文件或中文内容时,就要更改locale变量的规则。
示例代码:
原理介绍:每个ifstream对象内部都包含一个locale变量,用来指定字符的解析、比较等所有相关规则。默认构造的locale变量,是以“C”规则(可以把它简单地看成是只识别英文字符的规则)来初始化的。所以只要你只读取全英文路径的文件及全英文的内容,是不会有问题的。而当我们需要读取中文路径文件或中文内容时,就要更改locale变量的规则。
示例代码:
01
char
buffer[50];
02
ifstream ifs;
03
04
//输出默认locale规则的名字
05
cout << ifs.getloc().name.c_str() << endl;
06
//更改locale规则以支持中文
07
ifs.imbue(locale(
"chs"
));
08
cout << ifs.getloc().name.c_str() << endl;
09
//打开中文路径文件
10
ifs.open(
"d:\\测试.txt"
);
11
if
(ifs.good())
12
{
13
//读取中文字符
14
ifs.getline(buffer, 50);
15
}
转自:http://my.oschina.net/chen0dgax/blog/91924
0 1
- ifstream读取文件失败和乱码问题
- ifstream读取文件第一个字符乱码问题
- ifstream 和 getline 读取文件
- 读取文件:ifstream和getline
- ifstream读取文件和stringstream读取内容
- ifstream fileIn 读取文件遇到的问题
- 使用ifstream和getline读取文件内容
- c++使用getline和ifstream读取文件
- c++使用getline和ifstream读取文件
- 使用ifstream和getline读取文件内容
- 使用ifstream和getline读取文件内容
- 使用ifstream和getline读取文件内容
- 使用ifstream和getline读取文件内容
- 使用ifstream和getline读取文件内容
- 使用ifstream和getline读取文件内容
- 使用ifstream和getline读取文件内容
- 使用ifstream和getline读取文件内容
- c++使用getline和ifstream读取文件
- java设计模式—工厂模式
- tm ,time_t,SYSTEMTIME转换
- 一致性hash算法 - consistent hashing
- MapReduce操作HBase
- 嵌入式linux和嵌入式android系统有什么区别和联系?
- ifstream读取文件失败和乱码问题
- java设计模式之——策略模式
- 算法经典书籍推荐
- 新浪微博的破局之路
- Sina Weibo API 10006 错误
- 由Josephus问题说开去(to be continued)
- java个人学习笔记03(if、switch、break、continue)
- Javascript毫秒数
- WebRTC学习笔记