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; ...
随机推荐
- VS调试工具
F5--启动运行,跳到下一个断点 F10--逐步调试 F11--逐句调试 F10和F11的区别: method(); int a = 1; 当程序运行到如上面的method方法时,按F10会直接跳到下 ...
- 每天进步一点点------Allegro 蛇形走线
对于高速数据总线,如果芯片内部没有延时调节功能,通常使用蛇形走线来调整延时以满足时序要求,也就是通常所说的等长线.蛇形走线的目的是调整延时,所以这一类网络都有延迟或相对延迟约束.所以在做蛇形走线调整时 ...
- Educational Codeforces Round 76 (Rated for Div. 2) B. Magic Stick
Recently Petya walked in the forest and found a magic stick. Since Petya really likes numbers, the f ...
- Codeforces Round #622 C2.Skyscrapers (hard version)
This is a harder version of the problem. In this version n≤500000n≤500000 The outskirts of the capit ...
- .net C# Chart控件的简单使用
1.拖控件Chart 到界面 2. 清除默认的序列 chart1.Series.Clear(); 3.生成一个序列,并添加到chart1中,序列可添加多个 Series s1 = new Se ...
- js的基本分类(0.1)
js分内嵌,内联,外部样式表三种, js的组成分,ES(变量,函数,对象,数组,判断,循环),BOM(浏览器对象模型),DOM(文档对象模型), js的五种输出语句,alert(警告框),confir ...
- DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL 未能在“xmlhttpRequest”上执行“open”:无效的URL。
出现这个报错主要是baseurl:http://192.168.*.*/后面的(/)或是请求里面的url:/user/login中前面的(/)有一个漏掉了,导致合成的路径不完整,所以报错:无效的URL
- 世界坐标转到UGUI坐标
public static Vector3 WorldToUI(Camera camera,Vector3 pos){ CanvasScaler scaler = GameObject.Find(&q ...
- Sql性能优化梳理
前言 先简单梳理下Mysql的基本概念,然后分创建时和查询时这两个阶段的优化展开. 1.0 基本概念简述 1.1 逻辑架构 第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析 ...
- aria2连接网站出现handshake failure问题的分析与解决方法
aria2是一款轻量级的,支持多协议,跨平台的命令行下载工具,是笔者目前在使用的下载工具,结合uget使用基本上能媲美window下的迅雷工具.在笔者使用过程中,遇到了aria2连接部分网站时出现ha ...