青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

小明思考

高性能服務器端計算
posts - 70, comments - 428, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

C++源文件編碼問題

Posted on 2007-04-05 15:30 小明 閱讀(5861) 評論(6)  編輯 收藏 引用 所屬分類: C/C++ToolsG11N/ICU
1 . VC8(VS2005)

   VC8能識別的源文件編碼有三種:ANSI(本地codepage),utf8,utf16. 后面兩種要保留BOM,否則VC8不能識別。

   基本上源文件的編碼其實只對文件中的字符串的值有影響。

先說結論:
對于普通字符串("中文1234"),VC8會把它從源文件的編碼格式轉為ANSI字符串。
對于寬字符串(L"中文1234"), VC8會把它從源文件的編碼格式轉為utf16字符串。

例子1:test.cpp (編碼是utf8)
#include <stdio.h>
#include 
<string.h>

#define TEST_MSG            "中文1234"

int main(int argc, char* argv[])
{
    
char buf[1024]={0};
    strcpy(buf,TEST_MSG);
    
printf("%s\n",buf);

    
for(int i=0;buf[i]!=0;++i)
    {
        printf(
"0x%2x ",(unsigned char)buf[i]);
    }
    
return 0;
}

如果這個程序在codepage 936(簡體中文)上面去compile
輸出的結果就是
中文1234
0xd6 0xd0 0xce 0xc4 0x31 0x32 0x33 0x34
可以看出是gb2312的編碼,而不是utf8

如果這個程序在codepage 932(日文)上面去compile
輸出的結果就是
中文1234
0x92 0x86 0x95 0xb6 0x31 0x32 0x33 0x34
可以看出是shift-jis的編碼,也不是utf8
(注:shift-jis也包含"中文"兩個字)

也就是說同樣的source code在不同的code page下產生不同的可執行文件

例子2:test.cpp (編碼改為ANSI)
如果這個程序在codepage 936(簡體中文)上面去compile
輸出的結果就是
中文1234
0xd6 0xd0 0xce 0xc4 0x31 0x32 0x33 0x34
可以看出是gb2312的編碼,而不是utf8

把相同的file拷貝到codepage 932(日文)上面去compile
輸出的結果是
????1234
0xd6 0xd0 0xce 0xc4 0x31 0x32 0x33 0x34
可以看出是binary內容相同,但是string卻不同了

例子三:test.cpp (編碼utf8)

#include <stdio.h>
#include 
<string.h>

#define TEST_MSG            L"中文1234"

int main(int argc, char* argv[])
{
    
char buf[1024]={0};
    memcpy(buf,(
const char *)TEST_MSG,sizeof(TEST_MSG));
    
//printf("%s\n",buf);

    
for(int i=0;i<sizeof(TEST_MSG);++i)
    {
        printf(
"0x%x ",(unsigned char)buf[i]);
    }
    
return 0;
}

在任何平臺下使用vc8去compile,結果都應該是輸出
0x2d 0x4e 0x87 0x65 0x31 0x0 0x32 0x0 0x33 0x0 0x34 0x0 0x0 0x0

順便考你一下:
如果想輸出"中文1234"的utf8格式,應該如何寫代碼,保證vc8在任何語言平臺下面去compile,結果都一樣正確?


2. gcc/g++
gcc/g++似乎不支持utf16編碼的源文件
可以處理ANSI和utf8格式的源文件(no BOM)

如果采用例子一所用的源文件(utf8編碼)
會輸出
0xe4 0xb8 0xad 0xe6 0x96 0x87 0x31 0x32 0x33 0x34
可以看出是utf8是編碼

這一點上看vc8和gcc是不同的

如果采用例子三所用的源文件(編碼是utf8,使用L和wchar_t)
會輸出
0x2d 0x4e 0x0 0x0 0x87 0x65 0x0 0x0 0x31 0x0 0x0 0x0 0x32 0x0 0x0 0x0 0x33 0x0 0x0 0x0 0x34 0x0 0x0 0x0 0x0 0x0 0x0 0x0
可以看出gcc的wchar_t是四個字節,跟vc8也不同


有些復雜,希望不要讓你困擾。

Feedback

# re: C++源文件編碼問題  回復  更多評論   

2007-04-05 19:36 by Corner Zhang
建議把源代碼的文件的編碼設為UTF8

# re: C++源文件編碼問題  回復  更多評論   

2007-04-05 22:03 by 自大者
我看樓主自己也沒搞清什么是"字符集"和"字符集編碼", 根本就不是什么utf16, 而是utf16-be, 就是ucs2, 就是你所謂的unicode.

# re: C++源文件編碼問題  回復  更多評論   

2007-04-05 23:31 by 阿來
長見識了 :)

# re: C++源文件編碼問題  回復  更多評論   

2007-09-26 09:11 by Minidx全文檢索
“任何平臺下使用vc8去compile,結果都應該是……“
VC8還支持什么平臺??

# re: C++源文件編碼問題  回復  更多評論   

2008-03-07 00:27 by 逍遙劍客
頭疼, 以后全UTF吧

# re: C++源文件編碼問題  回復  更多評論   

2011-12-09 10:11 by NetAsker
建議初學者別看這個。會被誤導的。
這個例子只會讓初學者更糊涂。
不知道是作者不理解unicode,還是故意攪混水。。
1。 首先,第一個例子,“如果這個程序在codepage 932(日文)上面去compile” 那么,你是拷貝過去的還是在日本系統上自己編輯的?從結果來看,我覺得你是拷貝過去的。

2。在看你的例3 test 中為什么沒有字符串打印? 你注視掉 //printf("%s\n",buf);這么關鍵的一句,為什么呢??你可以用wcsprintf測試。

3。還是測試3, “在任何平臺下使用vc8去compile,結果都應該是輸出
0x2d 0x4e 0x87 0x65 0x31 0x0 0x32 0x0 0x33 0x0 0x34 0x0 0x0 0x0”

你知道這是什么編碼格式嗎?utf-8還是utf16?,你說任何平臺下使用vc8,你說的任何平臺什么意思?




青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美视频一区二| 狼狼综合久久久久综合网| 欧美高清在线视频观看不卡| 国产综合视频| 久久国产精品久久国产精品| 欧美激情一区二区| 一区二区国产在线观看| 国产日韩精品在线播放| 欧美va亚洲va国产综合| 亚洲网站在线| 欧美激情精品久久久久久蜜臀 | 一本大道久久精品懂色aⅴ| 久久精品国产久精国产一老狼| 亚洲电影免费在线观看| 国产精品乱码人人做人人爱| 久久久久久久久伊人| 日韩一级精品视频在线观看| 母乳一区在线观看| 欧美一区国产在线| 亚洲午夜一区二区| 亚洲国产99| 国产字幕视频一区二区| 亚洲第一福利视频| 一区二区三区高清在线观看| 欧美亚洲网站| 欧美亚洲视频| 免费看黄裸体一级大秀欧美| 欧美一级理论性理论a| 久久久激情视频| 欧美一区=区| 欧美国内亚洲| 欧美一区二区三区免费看| 亚洲欧美日韩国产一区二区三区| 亚洲美女色禁图| 欧美一级片一区| 欧美精品久久一区二区| 欧美激情第六页| 欧美精品日韩综合在线| 国产午夜亚洲精品理论片色戒| 亚洲一区二区三区中文字幕在线| 欧美肥婆bbw| 亚洲少妇自拍| 亚洲在线第一页| 欧美.日韩.国产.一区.二区| 国产欧美日韩综合| 国产欧美在线观看| 日韩视频在线播放| 一区二区三区视频在线观看| 久久亚洲精选| 亚洲国产一区二区三区青草影视| 欧美国产国产综合| 国产精品一区二区久久精品| 国产精品入口66mio| 国产精品一区二区男女羞羞无遮挡| 亚洲第一色中文字幕| 久久精品国产亚洲精品| 在线视频精品| 欧美日韩另类一区| 国产欧美短视频| 亚洲欧美国产另类| 久久久精品动漫| 亚洲欧美国产va在线影院| 久久国产免费| 国产老女人精品毛片久久| 亚洲午夜久久久| 日韩午夜免费| 欧美性猛交视频| 永久免费毛片在线播放不卡| 亚洲美女免费精品视频在线观看| 在线亚洲观看| 亚洲肉体裸体xxxx137| 亚洲一区视频| 国产精品久久久久久久久| 亚洲夫妻自拍| 欧美大片一区| 欧美搞黄网站| 亚洲视频一区| 欧美激情一区二区三区在线视频 | 日韩一级不卡| av成人免费| 国产精品外国| 久久综合网色—综合色88| 久久综合久久综合这里只有精品| 欧美日韩国产成人精品| 海角社区69精品视频| 一本久道综合久久精品| 久久久久久自在自线| 日韩视频在线播放| 欧美亚州一区二区三区| 午夜欧美视频| 日韩视频中文字幕| 国产酒店精品激情| 蜜桃av一区二区在线观看| 欧美成人精品三级在线观看 | 一区二区三区国产精华| 欧美中在线观看| 欧美日韩一二三四五区| 午夜精品免费视频| 久久国产精品久久久久久久久久| 亚洲国产精品v| 99国产精品久久久| 国内外成人免费激情在线视频网站| 男人的天堂成人在线| 欧美日韩一区二区在线视频 | 久久亚洲一区二区三区四区| 久久久欧美精品| 亚洲一区免费网站| 999亚洲国产精| 国产欧美日韩亚洲一区二区三区 | 狂野欧美性猛交xxxx巴西| 欧美激情在线免费观看| 欧美一区精品| 欧美看片网站| 日韩视频国产视频| 欧美一级在线播放| 亚洲天天影视| 欧美大片免费| 另类酷文…触手系列精品集v1小说| 欧美日韩一区在线观看| 欧美大胆a视频| 国产视频在线观看一区二区三区| 亚洲激情第一页| 欧美视频一区| 欧美激情精品久久久久久大尺度 | 国产欧美日韩亚洲一区二区三区| 亚洲国产精品va| 国内精品视频在线观看| 一区二区三区四区国产| 亚洲精品国产精品国自产观看| 欧美va日韩va| 国产日韩精品入口| 亚洲视频导航| 亚洲一区二区三区视频| 欧美国内亚洲| 最新日韩中文字幕| 亚洲精品乱码久久久久久日本蜜臀 | 欧美激情1区| 亚洲第一主播视频| 久久综合电影| 欧美韩国一区| 亚洲啪啪91| 一区二区三区视频在线播放| 99在线精品视频在线观看| 蜜桃av一区二区| 国产乱码精品一区二区三区不卡 | 欧美色图一区二区三区| 欧美激情在线有限公司| 1024成人网色www| 久久综合激情| 亚洲国产岛国毛片在线| 欧美成人在线影院| 欧美韩日一区二区| 91久久久精品| 久久一区精品| 亚洲免费一在线| 国产精品国产三级欧美二区| 一本大道久久a久久综合婷婷| 亚洲视频在线播放| 国产精品萝li| 久久国产主播| 欧美福利电影网| 亚洲色图自拍| 国产精品麻豆成人av电影艾秋| 午夜精品福利视频| 美国成人毛片| 日韩视频一区二区在线观看 | 久久久久久亚洲精品杨幂换脸| 国产综合在线看| 欧美激情视频免费观看| 一区二区三区日韩精品视频| 久久精品视频播放| 亚洲日本无吗高清不卡| 国产精品久久久一区二区| 久久国产欧美日韩精品| 亚洲激情黄色| 久久久最新网址| 一区二区激情视频| 韩国福利一区| 国产精品yjizz| 久久久久一本一区二区青青蜜月| 亚洲欧洲日本国产| 久久久久久一区| 亚洲一区二区免费视频| 黄色成人免费观看| 欧美视频三区在线播放| 久久综合给合久久狠狠狠97色69| 日韩一级黄色大片| 欧美xx视频| 久久精品国产一区二区三区 | 美女精品在线观看| 亚洲——在线| 亚洲精选一区二区| 伊人狠狠色丁香综合尤物| 欧美性久久久| 欧美日本国产一区| 欧美成人蜜桃| 老色批av在线精品| 久久久www成人免费精品| 久久婷婷综合激情| 亚洲一区综合|