1. 程式人生 > >Vs2008中ofstream不能讀取帶有中文的路徑

Vs2008中ofstream不能讀取帶有中文的路徑

有時候用ifstreamofstream 開啟帶有中文路徑的檔案會失敗。

解決辦法:
1
、使用C 語言的函式設定為中文執行環境
setlocale(LC_ALL,"Chinese-simplified");

2 、使用STL 函式設定為系統語言環境
std::locale::global(std::locale(""));

當然選2 啦!

 ofstream writefile;

string filename=("d:/ 我的文件/ 測試.txt");

    locale loc = locale::global(locale("")); // 要開啟的檔案路徑含中文,設定全域性locale

為本地環境

    writefile.open(filename.c_str(),ios::out); // 開啟檔案

    locale::global(loc);// 恢復全域性locale

locale 物件的name 方法可以看到,通過locale("") 構造出的locale 物件的name"Chinese_People's Republic of China.936" ,而原始的locale 物件的name"C" ,也就是預設的ANSI _C 公約。

注意:如果使用locale loc = locale::global(locale("")) 設定全域性locale 後沒有用 locale::global(loc)

恢復的話,那麼在程式後面的cout 語句就不能輸出中文了,雖然這時候操作中文檔案沒有問題,但是這也是很容易讓人掉入陷阱的地方,應該值得注意。解決方法:

先將CString 轉為char*

CString str=view->m_sFilePath;
   //CString str = "";
   //ofstream
中傳的引數不能有漢字,必須轉換一下是其暫緩方法
   str.AppendFormat("cluster%d%d.txt",aMatrix->X_part,aMatrix->Y_part);
   char*   sz   =   str.GetBuffer(str.GetLength());
   locale loc = locale::global(locale(""));
   ofstream ofile(sz);

轉載網友方法:

/* 方法1 ,使用_TEXT() 巨集定義將字串常量指定為TCHAR* 型別 這種情況下必須是unicode 下編譯                */
  18:     /*
如果是我,首選此型別                                                 */
  19:     /************************************************************************/
  20:     fstream file;
  21:     file.open(_TEXT("c://
測試// 測試文字.txt"));
  22:     cout<<file.rdbuf();
  23:     file.close();
  24:
  25:     /************************************************************************/
  26:     /*
方法2 ,使用STL 中的locale 類的靜態方法指定全域性locale                   */
  27:     /*
使用該方法以後,cout 可能不能正常輸出中文,十分蹊蹺                    */
  28:     /*
我發現了勉強解決的方法:不要在還原區域設定前用coutwcout 輸出中文   */
  29:     /*
否則後果就是還原區域設定後無法使用cout wcout 輸出中文                 */
  30:     /************************************************************************/
  31:     locale::global(locale(""));//
將全域性區域設為作業系統預設區域
  32:     file.open("c://
測試// 測試文字2.txt");// 可以順利開啟檔案了
  33:     locale::global(locale("C"));//
還原全域性區域設定
  34:     cout<<file.rdbuf();
  35:     file.close();
  36:
  37:     /************************************************************************/
  38:     /*
方法3 ,使用C 函式setlocale ,不能用cout 輸出中文的問題解決方法同上      */
  39:     /************************************************************************/
  40:     setlocale(LC_ALL,"Chinese-simplified");//
設定中文環境
  41:     file.open("c://
測試// 測試文字3.txt");// 可以順利開啟檔案了
  42:     setlocale(LC_ALL,"C");//
還原
  43:     cout<<file.rdbuf();
  44:     file.close();
  45: }

相關推薦

Vs2008ofstream不能讀取帶有中文路徑

有時候用ifstream 或ofstream 開啟帶有中文路徑的檔案會失敗。 解決辦法: 1 、使用C 語言的函式設定為中文執行環境setlocale(LC_ALL,"Chinese-simplified"); 2 、使用STL 函式設定為系統語言環境std::loc

使用configparser讀取帶有中文的配置文件出現UnicodeDecodeError錯誤

中文註釋 img term leg 配置文件 The text 沒有 Coding 問題: 使用configparser讀取配置文件時,出現UnicodeDecodeError錯誤,在沒有任何中文的時候讀取可以的,加了1句中文註釋後就拋出異常,異常如下: UnicodeD

SQL查詢語句參數帶有中文查詢不到結果

div -s navi user true color 技術 發現 col 今天寫個小demo的時候發現sql語句裏面的username為中文的時候就不能查到正確結果,sql語句如下: String sql = "select * from user where user

python opencv無法讀寫中文路徑圖片的解決辦法

讀取圖片: img = cv2.imdecode(np.fromfile(img_path, dtype=np.uint8), 1) 其中img_path為讀取圖片路徑,可以包含中文 儲存圖片: cv2.imencode('.jpg', src)[1]

URL引數值帶有中文的解決方案

在專案中,總是難以避免url中帶中文的情況. 後臺生成的Url中帶有中文: 則中文值應該用URLEncoder.encode進行編碼 serviceName = URLEncoder.encode

解決Unity WWW載入 AssetBundle---中文路徑

今天在 寫 檔案的時候遇到一個坑, www 載入檔案,不能支援中路徑, 我了個去~ 恰好我的persistPath 是中文的! 我去! 然後找到這麼一個解決方法: using UnityEngine; using System.Collections; usi

python3下使用cv2.imwrite儲存帶有中文路徑圖片

由於imwrite前使用編碼在python3中已經不適用,可用imencode代替,以下程式碼是從視訊中獲取第2幀儲存在中文資料夾下的例項: cap = cv2.VideoCapture("***.

徹底解決 cv2.imread讀取中文路徑圖片問題

原因:cv2.imread讀不到帶中文路徑圖片 解決: import cv2 import numpy as np cv2.imdecode(np.fromfile("D:\\haha哈哈.png",dtype=np.uint8),,cv2.IMRE

python3.6 opencv 讀取中文路徑的圖&&儲存圖片到帶中文路徑

#可以讀取帶中文路徑的圖 def cv_imread(file_path,type=0): cv_img=cv2.imdecode(np.fromfile(file_path,dtype=np.

Python OpenCV _1基本操作(畫圖,迴圈播放影象,滑鼠事件,讀取中文路徑的圖片)

此係列原始碼在我的GitHub裡:https://github.com/yeyujujishou19/Python-OpenCV 一,OpenCV的結構 A)根據功能和需求的不同,OpenCV中的函式介面大體可以分為如下部分: core 核心模組,主要包

C#StreamReader讀取中文時出現亂碼問題總結

utf8編碼 新的 conf window linu img utf8 enc ref 之前有一篇文章“ C#讀取及寫入配置文件教程”(http://blog.csdn.net/lisenyang/article/details/47291083)當中有一個問題就是在讀

解決方式-在Mac系統,Eclipse無法導入含有中文路徑的project

導入 pan support cati 一行 oct tracking -a ctype 1、改動eclipse.app/Contents/Info.plist。查找 <key>CFBundleExecutable<key>在其上方加入下面

url含有中文路徑時訪問出現404問題

pat find() 訪問 col pub 文字 str static color /** * URL中文字符編碼轉換 * @param url 含中文字符的URL * @return */ public static String getC

[轉]C#StreamReader讀取中文出現亂碼

摘自:C#中StreamReader讀取中文出現亂碼 原因是自Windows 2000之後的作業系統在檔案處理時預設編碼採用Unicode所以.NET檔案的預設編碼也是Unicode。除非另外指定,StreamReader的預設編碼為Unicode,而不是當前系統的ANSI內碼表。但是文件大部分還是以ANS

SQL查詢語句引數帶有中文查詢不到結果

今天寫個小demo的時候發現sql語句裡面的username為中文的時候就不能查到正確結果,sql語句如下: String sql = "select * from user where username=? and password=?";   但是在navicat裡面直接查詢就能

python2及python3下關於cv2讀取中文路徑下的圖片以及在圖片上顯示中文的問題

1.python2下讀取中文路徑圖片 示例如下: import cv2 img_path = '劉昊然.jpg ' #圖片和py檔案放在一個資料夾下,所以不用寫絕對路徑 im = cv2.imread(img_path.decode(‘utf-8')) 2.pyth

【python】open函式在遇到中文路徑的解決方法

# 儲存到檔案中 file_name = 'G:/pycode/mahongpengTest/biquge/dawangraoming/' + str(novel_chapter) + '.txt' with open(file_name_utf8,'a')

VS2017編譯GDAL(64bit)+解決C#讀取Shp資料中文路徑的問題

編譯GDAL過程比較繁瑣,查閱了網上相關資料,同時通過實踐,完成GDAL的編譯,同時解決了SHP資料中文路徑及中文欄位亂碼的問題,本文以“gdal-2.3.2”版本為例闡述整個編譯過程。 一、編譯準備 1、編譯工具是VS2017,編譯前需要下載“gdal-2.3.2”和“swigwin-3.0.12”,下載連

在plsql , sql語句帶有中文的查詢條件查詢不到資料

PLSQL Developer中文顯示亂碼是因為Oracle資料庫所用的編碼和PLSQL Developer所用的編碼不同所導致的。 解決方法: - 1. 先查詢Oracle所用的編碼 select userenv('language') from dual; **

客戶端提交資料給伺服器端,如果資料帶有中文的話,有可能會出現亂碼情況

request: 如果是GET方式 程式碼轉碼 String username = request.getParameter("username"); String password = request.getParameter("password"); String use