c++ 读取、输出txt文件
下面这段话转自:https://blog.csdn.net/lightlater/article/details/6326338
关于文本文件的文件头
第一 ANSI文件的文件头为空,不需要处理;
第二 UNICODE文件的文件头为0xFF,0xFE共计两个字节,读取时需要偏移两个字节再行读取;
第三 UTF-8文件的文件头为0xEF,0xBB,0xBF共计三个字节,读取时需要偏移三个字节后再行读取;
1.ansi格式txt文件
void readAnsiTXT(){
string filename = "ansi.txt";
ifstream fin(filename.c_str());
if (!fin.is_open()){
cout << "open failed!\n";
}
char ch;
string msg = "";
while (fin.get(ch)){
msg += ch;
}
cout << msg << "\n";
}
2.Unicode格式
转载:https://blog.csdn.net/hxfhq1314/article/details/80344669
memset函数:https://baike.baidu.com/item/memset/4747579?fr=aladdin
setlocal函数:https://www.runoob.com/cprogramming/c-function-setlocale.html
void readUnicodeTXT(){
string filename = "unicode.txt";
ifstream fin;
fin.open(filename, ios::binary);
fin.seekg(, ios::beg);
wstring wstrLine;
while (!fin.eof())
{
wchar_t wch;
fin.read((char *)(&wch), );
wstrLine.append(, wch);
}
string str = ws2s(wstrLine);
str.erase(str.size()-, );//删除结尾重复的一个字符
cout << str << endl;
}
std::string ws2s(const std::wstring& ws)
{
std::string curLocale = setlocale(LC_ALL, NULL); // C 库函数 char *setlocale(int category, const char *locale) 设置或读取地域化信息。
setlocale(LC_ALL, "chs");
const wchar_t* _Source = ws.c_str();
size_t _Dsize = * ws.size() + ;
char *_Dest = new char[_Dsize];
memset(_Dest, , _Dsize);
wcstombs(_Dest, _Source, _Dsize);
std::string result = _Dest;
delete[]_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
utf8格式:
void readUtf8TXT(){
string str = "utf8.txt";
wstring res=L"";
std::locale loc("chs");
std::wcout.imbue(loc);
std::wifstream wif(str, ios::binary);
codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>* codecvToUnicode = new codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>;
if (wif.is_open()){
wif.imbue(std::locale(wif.getloc(), codecvToUnicode));
wstring wline;
while (getline(wif, wline)){
wstring convert;
for (auto c : wline){
if (c != L'\0' && c != L'?') convert += c;
}
res = res + convert;
}
wif.close();
}
for (wstring::iterator i = res.begin(); i != res.end(); i++){//将res中的'\r'换成'\n',否则输出异常
if (*i == '\r'){
*i = '\n';
}
}
wcout << res << endl;
}
Windows下用std::wifstream读取Unicode和UTF-8文本
Windows下使用std::wifstream读取Unicode文本的方法:
std::locale loc("chs"); //windows下ok
std::wcout.imbue(loc);
// open as a byte stream
std::wifstream wif("路径", std::ios::binary);
std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header>* codecvtToUnicode = new std::codecvt_utf16 < wchar_t, 0x10ffff, std::consume_header >;
if (wif.is_open())
{
// apply BOM-sensitive UTF-16 facet
wif.imbue(std::locale(wif.getloc(), codecvtToUnicode));
std::wstring wline;
while (std::getline(wif, wline))
{
std::wstring convert;
for (auto c : wline)
{
if (c != L'\0' && c != L'?')
convert += c;
}
wcout << convert << endl;
}
wif.close();
//delete codecvtToUnicode; //new和delete,应该不用手动delete,在哪里delete都会崩溃(亲测)
}
Windows下使用std::wifstream读取UTF-8文本的方法:
std::locale loc("chs"); //windows下ok
std::wcout.imbue(loc);
// open as a byte stream
std::wifstream wif("路径", std::ios::binary);
std::codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>* codecvtToUnicode = new std::codecvt_utf8 < wchar_t, 0x10ffff, std::consume_header >;
if (wif.is_open())
{
// apply BOM-sensitive UTF-8 facet
wif.imbue(std::locale(wif.getloc(), codecvtToUnicode));
std::wstring wline;
while (std::getline(wif, wline))
{
std::wstring convert;
for (auto c : wline)
{
if (c != L'\0' && c != L'?')
convert += c;
}
wcout << convert << endl;
}
wif.close();
//delete codecvtToUnicode; //new和delete,应该不用手动delete,在哪里delete都会崩溃(亲测)
}
c++ 读取、输出txt文件的更多相关文章
- iOS案例:读取指定txt文件,并把文件中的内容输出出来
用到的是NSString中的initWithContentsOfFile: encoding方法 // // main.m // 读取指定文件并输出内容 // // Created by Apple ...
- Java基础-输入输出-2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt
2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt ...
- ZK中使用JS读取客户端txt文件内容问题
最近写一个需求时遇到一个问题,用户需要通过点击一个按钮直接读取他自己电脑上D盘的一个txt文件内容显示到页面,因为项目现在是用ZK写的.我对于ZK也是刚刚了解不就,很多都还不是很熟.起初我是想用io流 ...
- 字节流,读取 a.txt 文件内容,并打印出来
import java.io.FileInputStream;import java.io.IOException; /** 字节流,读取 a.txt 文件内容,并打印出来 */public clas ...
- 编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt
package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep ...
- Python读取中文txt文件错误:UnicodeEncodeError: 'gbk' codec can't encode character
with open(file,'r') as f: line=f.readline() i=1 while line: line=line.decode('utf-8') line=f.readlin ...
- Pandas——读取csv,txt文件
""" 读取csv文件 该文本中的分割符既有空格又有制表符(‘/t’),sep参数用‘/s+’,可以匹配任何空格. """ import p ...
- C# 读取网络txt文件 并写在本地txt文件中
public void WriteStream() { try { stirng ImagesPath = ImagesPath + "\\2013-09-27.txt"; Htt ...
- 2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt
package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...
随机推荐
- HTML5学习(3)元素
HTML5元素周期表 详情见:http://www.xuanfengge.com/funny/html5/element/
- linux中systemctl详细理解及常用命令
linux中systemctl详细理解及常用命令 https://blog.csdn.net/skh2015java/article/details/94012643 一.systemctl理解 Li ...
- echarts相关问题记录
1.图标距离容器边界 //echats options options : { //... grid : { top : 40, //距离容器上边界40像素 bottom: 30 //距离容器下边界3 ...
- Atcoder Beginner Contest152F(DFS+状压DP)
二维状压写成一维状压,省略加上第i条边这一维 #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace st ...
- 论STA | SOCV / POCV 之 variation (2)
芯片制造涉及到许多复杂重复的过程,如:光刻.蚀刻.离子注入.扩散.退火.而且都是原子级操作,尽管控制非常严格,但偏差不可避免. 工艺偏差会导致芯片物理参数偏差,如:线宽.沟道掺杂浓度.线厚.临界尺寸. ...
- Python连载59-HTTP首部字段和消息头,Thinker简介
一.首部字段或者消息头 1.下面几个类型都是请求的: User-Agent:关于浏览器和它平台的消息,如Mozilla5.0 Accept:客户端能处理的页面的类型,如text/html Accept ...
- Mac电脑怎么远程桌面连接
https://jingyan.baidu.com/article/e75aca85039448142fdac651.html https://blog.csdn.net/youshaoduo/art ...
- 超好用的免费Redis客户端
Redis这款基于内存的键值对(key-vlaue)数据库,自带了一个基于命令行式的管理工具redis-cli,但是使用起来并不方便.虽然现在有了许多的图形化管理工具,有些需要收费,有些不好用.最终还 ...
- 试题编号: 201903-3 试题名称: 损坏的RAID5
这题的数据未免也太水了,题目的意思好像默认是每块磁盘装载数据的长度是相等的.我写了判断每次取数据是否会超过每块磁盘存的数据的长度,然而并没有什么卵用.交上去20分,写了个数据测了下,如果要求的块太大的 ...
- go语言下载及安装
go语言下载地址:https://studygolang.com/dl 在cmd输入go 如果显示这样,说明安装成功 go env -w GOPROXY=https://goproxy.cn,dire ...