c++ txt檔案的讀寫及亂碼問題解決
在程式設計中,我們經常需要對txt檔案進行讀寫操作,有時候由於編解碼問題,txt讀寫會出現亂碼問題。下面介紹一種基於ofstream和ifstream的txt檔案讀寫方法,並介紹txt檔案讀寫的亂碼解決方案。
1.txt檔案寫入
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ofstream outfile("1.txt",ios::ate); //開啟檔案,設定寫入方式為覆蓋寫入
if(!outfile)
{
cout <<"txt檔案開啟失敗!"<<endl;
exit(0);
}
outfile<<"寫入txt檔案示例.\n";
outfile<<"成功寫入.\n";
outfile.close();
}
txt裡面的寫入內容如下:
成功寫入。
2.txt檔案讀出
對上面讀入內容的txt進行讀出操作,程式碼如下:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
char txt[100];
ifstream infile;
infile.open("1.txt");
if(!infile.is_open())
{
cout<<"txt檔案開啟失敗"<<endl;
exit(0);
}
while(!infile.eof())
{
infile.getline(txt,100);
cout<<txt<<endl;
}
infile.close();
getchar();
}
讀出結果為:
讀出結果正確。
3.txt讀寫亂碼問題
有時候由於txt檔案編碼問題的不同,會導致讀寫的時候出現亂碼,通常的txt編碼方式有:
上面預設的編碼方式為ANSI,如果我們現在將它另存為1.txt,但編碼格式變為UTF-8,那麼讀出結果會變成:
發現結果完全錯誤,這時候我們需要編解碼轉換,具體程式碼如下:
#include <fstream>
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
string UTF8ToGB(const char* str)
{
string result;
WCHAR *strSrc;
LPSTR szRes;
//獲得臨時變數的大小
int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
strSrc = new WCHAR[i+1];
MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);
//獲得臨時變數的大小
i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
szRes = new CHAR[i+1];
WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);
result = szRes;
delete []strSrc;
delete []szRes;
return result;
}
int main()
{
char txt[100];
string msg;
ifstream infile;
infile.open("2.txt");
if(!infile.is_open())
{
cout<<""<<endl;
exit(0);
}
while(!infile.eof())
{
infile.getline(txt,100);
msg=UTF8ToGB(txt);
cout<<msg<<endl;
}
infile.close();
getchar();
}
將讀出結果進行上述轉換,發現結果又正確了。
相關推薦
RandomAccessFile 檔案讀寫中文亂碼解決
RandomAccessFile 讀寫檔案時,不管檔案中儲存的資料編碼格式是什麼 使用 RandomAccessFile物件方法的 readLine() 都會將編碼格式轉換成 ISO-8859-1 所以 輸出顯示是還要在進行一次轉碼 字串轉碼操作 str
c++ txt檔案的讀寫及亂碼問題解決
在程式設計中,我們經常需要對txt檔案進行讀寫操作,有時候由於編解碼問題,txt讀寫會出現亂碼問題。下面介紹一種基於ofstream和ifstream的txt檔案讀寫方法,並介紹txt檔案讀寫的亂碼解決方案。 1.txt檔案寫入 #include <
Linux C學習筆記——txt檔案讀寫
/*************** perror(s) 用來將上一個函式發生錯誤的原因輸出到標準裝置(stderr)。引數 s 所指的字串會先打印出,後面再加上錯誤原因字串。此錯誤原因依照全域性變數errno的值來決定要輸出的字串。 FILE * fopen(const c
Unity下關於C#的檔案讀寫一(基於TXT的簡單讀寫)
Unity下關於C#的檔案讀寫(基於TXT和LitJson) NOTE (基本認識):其實.txt,.xml,.json這類檔案都屬於文字檔案,類似的還有.lrc歌詞檔案,.ini配置檔案,.reg登錄檔檔案等等,這類檔案所儲存的內容都是文字(即為字串),
C# 讀取 TXT檔案的時候中文亂碼解決方法
用C#編寫notepad時,讀取檔案時發現英文顯示正常,但是中文就是一個一個方框。如果把txt轉換成UTF-8格式時讀取就正常,so懷疑是編碼問題,仔細查了查幫助,發現Default的說明是“獲取系統的當前 ANSI 內碼表的編碼”,就用了下,果然不是亂碼了。
Java 之 檔案讀寫及效能比較總結
Java 之 檔案讀寫及效能比較總結 2014年05月12日 17:56:49 閱讀數:21765 幹Java這麼久,一直在做WEB相關的專案,一些基礎類差不多都已經忘記。經常想得撿起,但總是因為一些原因,不能如願。 其實不是沒有時間,只是有些時候疲於總結,今得空,下定決心
C語言檔案讀寫
#include<stdio.h> int main() { int age=0; FILE *file =NULL; file=fopen("test.txt","r+"); //rename("test.txt","xinhai.txt"); if(
python的csv檔案讀寫及避免出現空行的方法
使用列表生成csv >>> import csv >>> keys=['a','b','c','d'] >>> data=[[1,2,3,4],[5
C語言檔案讀寫(輸入輸出重定向)
freopen("D:\\test.txt","r",stdin);//檔案讀入 輸入重定向 freopen("D:\\test.txt","w",stdout);//檔案寫入 輸出重定向 檔案讀入(輸入重定向) freopen ( " D:\\test.txt
Unity下關於C#的檔案讀寫三(Json格式讀寫-基於LitJson簡單認識)
Unity使用LitJson需要下載litjson.dll檔案,放置在工程中的Plugins資料夾下(如果沒有自己新建); 使用using LitJson; 名稱空間 一: 類轉換為Json格式文字: //首先隨意建立一個類 public class
c#匯出檔案,檔名中文亂碼解決方法
public string clFielName(string fileName) { System.Web.HttpContext curContext = System.Web.HttpContext.Current; string outputFile
C++ UNICODE 檔案讀寫相關
<致敬原作者>http://librawill.blogspot.com/2008/08/cunicode_2881.html 熟悉一下字元型別,char, wchar_t, TCHAR,最熟悉的char是單位元組字元,適用於ANSI編碼;wchar_t是雙位元組的寬字元型別,適用於unico
c#FileStream檔案讀寫(轉)
//C#檔案流寫檔案,預設追加FileMode.Append string msg = "okffffffffffffffff"; byte[] myByte = System.Text.Encoding.UTF8.GetBy
python2.7中編碼問題以及txt檔案讀寫的注意事項
首先,要清楚一點:在py檔案和python動態直譯器(命令列)中,輸入中文字串編碼是不一樣的,動態直譯器中預設編碼環境是ansi,比較麻煩(也有解決辦法),建議在py檔案中處理編碼問題。 python2.7中的字串有兩種形式:str”…”和 unicode u
(Android)Android TXT檔案讀寫
轉載網址:http://blog.csdn.net/wirelessqa/article/details/7807762 package com.wirelessqa.helper; import java.io.FileInputStream; import java
C++通過檔案讀寫儲存使用者註冊登入資訊
我的MySQL因為電腦的反覆重灌實在是裝不好了,不知道少解除安裝了什麼導致MySQL裝不好。那麼我就自己寫一個檔案來儲存使用者名稱和密碼這兩個登入資訊吧。整體上用到了檔案的讀寫操作。 我用到了兩個函式,分別是int regest()和int lo
C語言檔案讀寫操作,寫入資料到檔案
很早寫的在linux系統下的檔案讀寫操作,寫入資料到檔案,很時候初學者學習 #include <stdio.h> int writeInfoToFile(char *strFile) { int age, i; char name[10]; FI
C語言檔案讀寫函式——fputc和fgetc
C語言fputc()函式:寫檔案函式(將一指定字元寫入檔案流中) 標頭檔案: #include <stdio.h> 定義函式: int fputc(int c, FILE * stream); 函式說明:fputc 會將引數c 轉為unsi
C語言檔案讀寫函式詳解
1. 首先要理解幾個概念: 檔案: 按一定規則儲存在磁碟上的資料集合。 檔名: 能唯一標識某個磁碟檔案的字串。形式: 碟符:/ 路徑 / 檔名.副檔名 文字檔案:: 資料以其數字字元的ASCII碼形式、一個位元組一個位元組地儲存在磁碟上。 二進位制檔案:資料以二進位制形式在儲存在磁碟上。 裝置
MFC中TXT檔案讀寫
文字檔案的讀寫 正確的文字檔案讀寫過程 1.定義檔案變數;2.開啟指定的檔案;3.向從文字檔案中寫入資訊;4.從文字檔案中讀取資訊;5.關閉檔案 1、定義檔案變數 定義檔案變數格式:CStdioFile 檔案變數; 例如,定義一個名稱為f1的檔案變數,語句如下: