1. 程式人生 > >vs中ANSI編碼和UNICODE編碼及二者的相容性問題

vs中ANSI編碼和UNICODE編碼及二者的相容性問題

ANSI編碼的字符集是多字符集,也就是每個字元的編碼寬度不相等。

UNICODE編碼的字符集是寬字符集,每個字元的編碼都是兩個字元。

有些作業系統僅支援多字符集,有些作業系統僅支援寬字符集,當然更多的作業系統是兩種字符集都支援。為了相容兩種字符集,vs編譯器為使用巨集定義的方法來選擇編譯成多字符集還是寬字符集,下面分別介紹:

1.多字符集(ANSI)

字元型是char    const char*型是LPCSTR

對應的一些字串相關函式:MessageBoxA(),strcpy(),strcat(),strlen()  (注:以str開頭)

2.寬字符集(UNICODE)

字元型是wchar_t    const char*型是LPCWSTR

對應的一些字串相關函式:MessageBox(),wcscpy(),wcscat(),wcslen();  (注:以wcs開頭)

3.相容字符集

相容字符集要包含標頭檔案<tchar.h>

字元型是TCHAR

如果是多字元型編譯,就把巨集展開成char;如果是寬字符集編譯,就把巨集展開成wchar_。

對於const char*要放在_T()巨集定義中。比如:_T("Hello World!")。

那麼如果選擇了多字元編譯,就把巨集展開成"Hello World!";如果是寬字元編譯,就把巨集展開成L"Hello World!"

對應的一些字符集相關函式:MessageBox(),

_tcscpy(),_tcscat(),_tcslen()  (注:以_tcs開頭,是C執行時庫)

或者lstrcpy(),lstrcat(),lstrlen()  (注:以lstr開頭,是Windows函式)。

相容字符集的巨集定義在標頭檔案<tchar.h>中,部分程式碼如下所示:

#ifdef __UNICODE
    #define _tcslen  wcslen
    #define TCHAR wchar_t
    #define LPTSTR wchar_t*
    #define _T(x)  L##x
#else
    #define _tcslen  strlen
    #define TCHAR char
    #define LPTSTR char*
    #dfine   _T(x)    x
#endif


相關推薦

vsANSI編碼UNICODE編碼二者相容性問題

ANSI編碼的字符集是多字符集,也就是每個字元的編碼寬度不相等。 UNICODE編碼的字符集是寬字符集,每個字元的編碼都是兩個字元。 有些作業系統僅支援多字符集,有些作業系統僅支援寬字符集,當然更多的作業系統是兩種字符集都支援。為了相容兩種字符集,vs編譯器為使用巨集定義的

ASCII編碼Unicode編碼

utf-8 div 可變 2個 新的 code 統一 英文 範圍 ASCII編碼和Unicode編碼 ASCII編碼和Unicode編碼的區別:ASCII編碼是1個字節,而Unicode編碼通常是2個字節。 字母A用ASCII編碼是十進制的65,二進制的010000

中文轉換成Unicode編碼Unicode編碼轉換成中文,Java程式碼實現

 import java.util.Properties; public class Test { public static void main(String[] args

python的字符串編碼問題——2.理解ASCII碼、ANSI碼、Unicode編碼、UTF-8編碼

unicode編碼 統一 col 簡單 utf 文字 stand 二進制 pan ASCII碼:全名是American Standard Code for Information Interchange,ASCII碼中,一個英文字母(不分大小寫)占一個字節的空間,範圍0x0

VS下使用多字符集編碼Unicode字符集編碼的總結

編寫MFC程式的時候,總遇到字符集轉換的問題,這裡總結一下,方便大家使用。 在多位元組字符集編碼下,設定如下環境: 這時CString與char陣列是可以互相轉換的,而如果改成“使用Unicode字符集”,設定如下: 原來的程式碼就會報很多錯誤,諸如: error C2664: “Cxx

jsjava字元unicode編碼的轉化

一般來說,良好的程式設計習慣要求在程式碼裡儘量不出現中文,一個是國際化問題,即同一份程式碼可能要滿足不同語言的顯示,還一個就是可能產生亂碼問題,不同的程式設計師用不同的IDE匯入這份程式碼可能使用了不同的預設編碼。 然而有些場景是必須保持中文的,比如讀取某個帶樣式文字的字型

SQLite的C++類,同時支援ANSI UNICODE編碼

源地址:http://blog.csdn.net/chinamming/article/details/17049575 標頭檔案(SQLite.h) /*********************************************************

文字編碼Unicode

his class blog .html 編碼 com 說明 hive html 文字編碼和Unicode 說明文字: https://blog.csdn.net/fengzhishang2019/article/details/7859064 Java 程序: https

打包解包模組總結:VS2010預設的編碼Unicode編碼

我把vc6.0上執行沒有問題的程式碼挪到vs2010上,出現了一系列問題。 其根本原因是兩種編譯器預設編碼不一樣,vc6.0中預設的編碼是(多位元組)Ascii編碼,VS2010中預設的編碼是Unicode編碼。 可以簡單粗暴地改回去 開啟選單欄–>專案–>XXX屬性–>

.Net(c#)漢字Unicode編碼互相轉換

{"Tilte": "\u535a\u5ba2\u56ed", "Href": "http://www.cnblogs.com"} 經常遇到這樣內容的json字串,原來是把其中的漢字做了Unicode編碼轉換。 Unicode編碼:   將漢字進行UNICODE編碼,如

字元編碼之Ascll編碼ANSI編碼Unicode編碼,UTF-8編碼 ,BOM

從大一上C語言就開始認識了Ascll編碼,ascll碼也算是我們最早所接觸的編碼 【1】Ascll碼  Ascll碼由三部分組成:           第一部分從00H到1FH共32個,一般用來通訊或作為開工至之用,有的可以顯示在螢幕上,有的則無法再螢幕上顯示。  

封裝tinyxml實現對UTF8UNICODE編碼格式轉換

    tinyxml對儲存xml非常方便,但儲存的格式卻不是UTF8,導致實際使用中遇到讀取問題。     為了方便使用,藉助對C++ 儲存檔案為UTF8編碼格式學習,實現對tinyxml的資料轉換做了一些封裝,使使用更加方便些。重點實現了UTF8_to_string和s

關於序列化,utf編碼格式unicode編碼

1. 編碼這些應該是針對字元而言的,整形及數值這些是預設二進位制編碼的。因此,無論是硬碟中還是記憶體中,雖然存的都是二進位制碼,但是字元的編碼方式可以是utf8,unicode等等。 2. 序列化只是一種將物件寫入位元組流的方法而已。可以自己去定義物件的拆分

所有的字符編碼由System.Text.Encoding類獲取所有的字符編碼Unicode編碼、 GB18030編碼、(UTF-8) 簡體中文(GB2312)

mac net 挪威 head sun -m abi cal 篩選 本頁列出來目前window下所有支持的字符編碼 ---通過 System.Text.Encoding.GetEncodings()獲取,裏面可以對其進行查詢,篩選,對同一個字符,在不同編碼進行查看和分

深入理解計算機系統(2.4)------整數的表示(無符號編碼補碼編碼

class 映射 們的 c語言 正數 裏的 小例子 負數 類型   上一篇博客我們主要介紹了布爾代數和C語言當中的幾個運算符。那麽這一篇博客我們主要介紹在計算機中整數是如何表示的,諸如我們在編碼過程中遇到的對數據類型進行強制轉換可能會得到意想不到的結果在這篇博客裏你會得到解

DjangoORM介紹字段字段參數

時也 特殊 nothing duration sys cal 概念 目錄 gre Object Relational Mapping(ORM) ORM介紹 ORM概念 對象關系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向

vs的slnsuo檔案是什麼

.sln 和 .suo都是是解決方案檔案。 .sln(Visual Studio.Solution):它通過為環境提供對專案、專案項和解決方案項在磁碟上位置的引用,可將它們組織到解決方案中。 包含了較為通用的資訊,包括解決方案所包含專案的列表,解決方案內任何項的位置以及解決方案的生成配置

Django - - 基礎 - - Django ORM介紹欄位欄位引數

目錄 Object Relational Mapping(ORM) ORM介紹 Django中的ORM Django ORM 常用欄位和引數 常用欄位 欄位合集(爭取記憶 ) 自定義欄位(瞭解為主) 欄位引數 時間

php utf8編碼gbk編碼相互轉換

1.utf8轉換為gbk header("Content-type:text/html;charset=UTF-8"); echo $str= 'utf8轉gbk!'; echo '<br />'; echo iconv("UTF-8

Express res.json res.end res.send()

今天對某個restful API 進行測試過程發現併發效能很差,吞吐率差了非常多。結果發現是res.end 誤用的情況。 現在總結下 express響應中用到常用三種API: res.send() res.json() res.end() 環境 測試環境:ex