程式中unicode與多位元組字符集的相關問題

2021-06-19 15:07:37 字數 852 閱讀 6788

首現介紹所遇到問題的背景,之前的程式是vc6.0的版本,現在要移植到vs2008上做開發,移植過來後出現了報了很多資料型別之間轉換的錯誤。

典型的問題部分**如下:

cstring path;

path=".\\bocai.txt";

file *fp;

fp=fopen(path,"w");

報的錯誤如下:error c2664: 「fopen」: 不能將引數1 從「cstring」轉換為「const char *」
後來查了相關的資料,總結的原因主要與編譯器所使用的字符集有關。

在vc6.0中預設的字符集是多位元組字符集,vs2008中預設的是unicode,在vc6.0轉到vs2008時就出現了上述的問題。關於unicode與多位元組字符集的區別會在單獨一篇文章中再討論。

這裡給出我試過的 幾種解決方案:

解決方法1:專案—>屬性—>常規,將字符集的選項有unicode改為多位元組字符集。

解決方法2:將fopen改為_tfopen版本,字串前加上巨集_t(),**如下:

cstring path;

path=".\\bocai.txt";

file *fp;

fp=_tfopen(path,_t("w"));

因為,fopen是c語言的庫函式,是ascii字符集版本的函式,_tfopen適用與ascii或unicode字符集,在字串前加上巨集_t()可以保證字串的相容性。

解決方法3:改為c++的寫法,**如下:

cstring path;

path=".\\bocai.txt";

ofstream outfile;

outfile.open(path);

Dll的多位元組和Unicode

我們定義dll的時候會區分 字符集 使用多位元組字符集 使用unicode字符集 編譯之後,使用時我們可能會碰到這類問題 程式為 unicode 格式,dll為多位元組格式,這樣呼叫時就可能有問題了 問題大多數情況主要出在我們傳入 傳出引數中使用了 cstring cstring在unicode中相...

Unicode 和多位元組字符集 MBCS

有些國際市場以大字符集來使用日文和中文等語言。為了支援這些市場的程式設計,microsoft 基礎類庫 mfc 支援以兩種方式處理大字符集 unicode 多位元組字符集 mbcs unicode 字串的 mfc 支援 整個類庫有條件地支援 unicode 字元和字串。特別是 cstring 類也支...

單位元組字符集,多位元組字符集,Unicode

我們在這裡介紹一下字元型別。這裡有3種編碼模式對應3種字元型別。第一種編碼型別是單子節字符集 single byte character set or sbcs 在這種編碼模式下,所有的字元都只用乙個位元組表示。ascii是sbcs。乙個位元組表示的0用來標誌sbcs字串的結束。第二種編碼模式是多位...