1. 程式人生 > >c++ txt檔案的讀寫及亂碼問題解決

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的檔案變數,語句如下: