1. 程式人生 > >CStdioFile ReadString 在unicode環境下漢字顯示的亂碼的問題。

CStdioFile ReadString 在unicode環境下漢字顯示的亂碼的問題。

txt文字是unicode編碼格式,但ReadString後,顯示漢字是亂碼的。以下是解決辦法。 

CString CSetupForm::GetTxtfile(CString txtdir)  //引數為檔案路徑

{
 
CStdioFile file;
if(file.Open(txtdir,CFile::modeNoTruncate | CFile::modeRead | CFile::typeText))
{
CString  str;
CString textcontent=_T("");
while(file.ReadString(str))
{
if(ReadStringToUnicode(str)) //這裡要處理下,不然漢字無法正常顯示。函式見下面
textcontent=textcontent+_T("\r\n")+str;
}
file.Close();
return textcontent;
}
else
{
return _T("");
}
 

 }

//這個函式我是引用別人的,但是原版有問題。總是會顯示一個“鉿“字出來。檢查了下,發現問題在於沒有字元的結束符。

BOOL ReadStringToUnicode(CString &str)
{


char *szBuf = new char[ str.GetLength()+1]; //數量要加1


for (int i = 0 ; i < str.GetLength(); i++)
{
szBuf[i] = (CHAR)str.GetAt(i);
}  
szBuf[str.GetLength()]='\0';   //這裡,必須要加上,否則會在結尾片顯示一個"鉿"字。
// USES_CONVERSION;
//char * sz=W2A(str.GetBuffer());  //這些方法我都試過,不行的。
BOOL bok= CharToUnicode(szBuf , &str);
delete []szBuf;
return bok;
}

//此函式是原版引用的。不需要任何更改
/////////////////////////////////////////////////////////////////////////////////////////
// 將Char型字元轉換為Unicode字元
int CharToUnicode(char *pchIn, CString *pstrOut)
{
int nLen;
WCHAR *ptch;


if(pchIn == NULL)
{
return 0;
}


nLen = MultiByteToWideChar(CP_ACP, 0, pchIn, -1, NULL, 0);//取得所需快取的多少
ptch = new WCHAR[nLen];//申請快取空間
MultiByteToWideChar(CP_ACP, 0, pchIn, -1, ptch, nLen);//轉碼
pstrOut->Format(_T("%s"), ptch);
delete [] ptch;


return nLen;
}

相關推薦

CStdioFile ReadStringunicode環境漢字顯示亂碼的問題

txt文字是unicode編碼格式,但ReadString後,顯示漢字是亂碼的。以下是解決辦法。  CString CSetupForm::GetTxtfile(CString txtdir)  //引數為檔案路徑 {  CStdioFile file;if(file.O

Unicode環境的字符差異

file data 需要 問題 字符串長度 會有 操作符 普通 c++編譯器   我總是對我的字符串使用_T()宏,這是為了讓我的代碼至少有Unicode的意識,當然,關於Unicode的話題不在這篇文章的討論範圍。_T()宏在8位字符環境下是如下定義的:     #def

linux環境關於顯示日期及修改密碼的小練習

一只小菜鳥的成長1.顯示1984-11-18是1984年的第幾天 2.顯示當前的日期 ##上面是兩種不同的表現形式## 3.在超級用戶下修改student用戶的密碼,並且student用戶在第一次登錄後強制修改密碼 ## passwd -e ## 強制修改密碼##註意:當使用root用戶修改其他用戶密

UNICODE環境讀寫txt文件操作

clas c程序 delete tag 編碼 eno 字符編碼 empty readline 內容轉載自http://blog.sina.com.cn/s/blog_5d2bad130100t0x9.html UNICODE環境下讀寫txt文件操作 (2011-07

解決Centos7/6中文顯示亂碼的問題

ddr centos7 語言 需要 查看 net vps pin 註意 新買了一個VPS,編寫腳本的時候發現中文顯示亂碼,而英文是正常的。 於是,想到了可能是VPS系統語言支持的中文沒配置好。所以,這裏記錄一下步驟。 一、首先查看當前系統默認采用的字符集: # locale

mpstat---用於多CPU環境顯示各個可用CPU的狀態

mpstat命令指令主要用於多CPU環境下,它顯示各個可用CPU的狀態系你想。這些資訊存放在/proc/stat檔案中。在多CPUs系統裡,其不但能檢視所有CPU的平均狀況資訊,而且能夠檢視特定CPU的資訊。 語法 mpstat(選項)(引數) 選項 -P:指定CPU編號。 引數 間隔時間:

解決方法——Qt5中漢字顯示亂碼,出現錯誤“常量中有換行符”

第一步:在QT中,工具-選項-文字編輯器-檔案編碼-UTF-8 BOM中選擇“如果編碼是utf-8則新增” 第二步:在程式碼中將漢字重新敲一遍(敲幾個字即可) 第三步:(解決亂碼) 原始碼:chart->setTitle(“實

關於通過網頁檢視JS原始碼中漢字顯示亂碼的解決方法

開頭貼出原文地址 在網頁中讀取js檔案,中文顯示正常(比如alert出js檔案的中文資訊)。但當瀏覽器檢視js檔案原始碼時,則會看到程式碼裡的中文全是亂碼。雖然不影響程式執行,但是在讀js檔案程式碼時,會受影響。 前幾天在瀏覽器檢視自己寫的web程式碼的時候,發現外聯js檔案的漢字註釋顯

Ubuntu16.04系統漢字顯示為方框解決辦法

問題詳情: 問題分析: 今天一開啟Ubuntu系統,竟然不支援中文顯示了。開始時以為是中文輸入法的問題,後面重灌了也不行。 然後我就一直在網上搜“Ubuntu系統不支援中文”,“Ubunt

【MFC】Unicode環境CString與char*轉換

CString轉const char* const char* CStr2C(CString cstring) { return CW2A(cstring.GetString()); } char*轉CString CString C2CStr(char* cstr) { ret

EOS開發環境eosio_assert顯示詳細錯誤資訊

前幾天在本地環境下除錯EOS程式碼時,執行程式碼之後只有簡簡單單的"Error 3050003: eosio_assert_meesage"的輸出,無法定位到哪個eosio_assert報出的錯誤。於是,查找了一番,解決之後記錄下。 首先,在啟動Docker的時候,加上--verbose-htt

Ubuntu英語環境完全顯示文泉驛微米黑字型的字型配置檔案

今天中華民國建國九十九週年和Ubuntu 10.10釋出之日,可謂雙喜臨門。更巧合的是,二者都以自由作為自己的信仰。 文泉驛,是Linux下最著名的自由中文字型,對於他的微米黑字型,我更是愛不釋手,所有的實驗報告都堅決使用它,即使是要放到Windows下,我也會將文件轉換成pdf格式,以極大程度的使用它

解決win7英文版中文顯示亂碼問題

解決win7英文版下中文顯示亂碼問題 系統顯示亂碼的問題多半是由於在安裝系統的時候時鐘、地域選擇錯誤的導致的。先給出解決辦法。 ControlPannel-->Clock, Language, and Region-->Administrative-->

解決 Centos7 中文顯示亂碼

一、首先檢視當前系統預設採用的字符集 命令:locale 或者echo $LANG,如果當初安裝的時候已經選擇了中文語言包的話,那麼預設的就是UTF-8字符集 [[email protected] ~]# locale LANG=zh_CN.UTF

Thinkphp在iis環境中文引數亂碼

1,無法獲取中文引數解決方案 IIS的url重寫模組,重寫後的中文編碼也是gbk,如果你的頁面是utf-8編碼,那麼重寫引數將會失效。像這些情況,我們就需要使用php內建的轉碼函式來處理編碼問題了:

UNICODE環境整行讀取文字檔案的方法

因為要逐行處理GB18030文字檔案,必須用UNICODE編碼。但在用ReadString讀取時總出錯,網上找了程式碼,但只能讀出前面5行,還有在文字比較上也不方便,因文字串末尾的回車符。琢磨了兩天終於完全搞定。下面是有關的程式碼,注意紅色部分。 .........  fil

Ubuntu系統漢字顯示為方框解決方法

好久沒有用Ubuntu系統了,今天一開啟,竟然不支援中文顯示了,對於一個地道中國人來說這無疑是個晴天霹靂,而且是會死人的那種。然後我就開始了空手接霹靂的歷程,足足搞了三個多小時,最後總算搞定了就不算浪費。 開始時以為是搜狗拼音的問題,然後重灌了一遍fcitx,然後用重灌了

UNICODE環境讀寫txt檔案操作

自己動手整理了一下,寫了幾個函式,用於UNICODE環境下對txt文字檔案的操作,針對txt文字的ANSIC編碼格式,進行了字元編碼格式的轉換。 *****************************************************************

unity3d漢字顯示亂碼問題

1、用Microsoft Visual Studio 開啟,檔案-》高階選項卡儲存-》選擇”簡體中文(GB2312)-內碼表936“-》確定-》儲存,再重新試一下,OK 之前開啟的所有Unity軟體及編輯器全部關閉!

dos環境執行dmp時顯示亂碼解決辦法之一

現象:windows系統dos環境下執行dmp指令碼時,中文資訊顯示為????亂碼 解決辦法1:統一字符集 (1)查詢資料庫字符集:一是Oracle server端的字符集,二是Oracle client端字符集,三是dmp檔案字符集;三者統一才能正確匯入;