[問題] gcc對非英文data c-string採什麼編碼方式?
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++(2013, x86 amd64), GCC(Cygwin64)
問題(Question):
想了解編譯器對非英文的c-string是如何編碼,所以寫了下列code,
方法是將兩個中文字"電腦"寫入程式碼,以char wchar_t兩種方式存入
執行時讓資料以hex值output,觀察編碼情形
我的問題是:
g++以char儲存所編出來的碼,我找不到它是什麼編碼方式,
一個中文字佔了3個char,這是什麼? UTF-24?????
結果(Wrong Output):
char wchar_t
msvc2013 x86及amd64 b9 71 b8 a3 96fb 8166
(Big5 "電"0xb971 (Unicode "電"0x96fb
"腦"0xb8a3) "腦"0x8166)
gcc on cygwin64 e9 9b bb e8 85 a6 96fb 8166
(?????) (Unicode)
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <iostream>
#include <sstream>
#include <string>
#include <cstring>
#include <cwchar>
#include <cstdint>//-std=c++11
using namespace std;
int main()
{
const char *c="電腦";
const wchar_t *wcl=L"電腦";
string buffer;
ostringstream oss;
cout<<"--c"<<endl;
for(int i=0, siz=strlen(c); i<siz; ++i)
{
oss.clear(); oss.str("");
oss<<hex<<static_cast<uintmax_t>( c[i] );
buffer=oss.str();
cout<<buffer.substr(buffer.length()-sizeof(char)*2, sizeof(char)*2)<<' ';
}
cout<<endl;
cout<<"--wcl"<<endl;
for(int i=0, siz=wcslen(wcl); i<siz; ++i)
{
oss.clear(); oss.str("");
oss<<hex<<static_cast<uintmax_t>( wcl[i] );
buffer=oss.str();
cout<<buffer.substr
(buffer.length()-sizeof(wchar_t)*2,sizeof(wchar_t)*2)<<' ';
}
cout<<endl;
return 0;
}
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.35.84.52
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1423968639.A.D8E.html
※ 編輯: frankhsu421 (114.35.84.52), 02/15/2015 10:52:03
※ 編輯: frankhsu421 (114.35.84.52), 02/15/2015 10:54:26
推
02/15 11:05, , 1F
02/15 11:05, 1F
→
02/15 11:11, , 2F
02/15 11:11, 2F
→
02/15 11:12, , 3F
02/15 11:12, 3F
→
02/15 11:15, , 4F
02/15 11:15, 4F
→
02/15 11:20, , 5F
02/15 11:20, 5F
→
02/15 11:23, , 6F
02/15 11:23, 6F
→
02/15 11:31, , 7F
02/15 11:31, 7F
推
02/15 15:34, , 8F
02/15 15:34, 8F
→
02/15 16:24, , 9F
02/15 16:24, 9F
→
02/15 16:25, , 10F
02/15 16:25, 10F
→
02/15 16:27, , 11F
02/15 16:27, 11F
→
02/15 16:29, , 12F
02/15 16:29, 12F
→
02/15 17:29, , 13F
02/15 17:29, 13F
→
02/15 17:30, , 14F
02/15 17:30, 14F
→
02/15 17:33, , 15F
02/15 17:33, 15F
→
02/15 18:25, , 16F
02/15 18:25, 16F
→
02/15 18:33, , 17F
02/15 18:33, 17F
→
02/15 18:33, , 18F
02/15 18:33, 18F
→
02/15 18:40, , 19F
02/15 18:40, 19F
→
02/15 19:09, , 20F
02/15 19:09, 20F
→
02/15 19:32, , 21F
02/15 19:32, 21F
→
02/15 19:33, , 22F
02/15 19:33, 22F
→
02/15 19:33, , 23F
02/15 19:33, 23F
→
02/15 19:34, , 24F
02/15 19:34, 24F
→
02/15 19:35, , 25F
02/15 19:35, 25F
→
02/15 20:31, , 26F
02/15 20:31, 26F
→
02/15 20:31, , 27F
02/15 20:31, 27F
→
02/15 20:36, , 28F
02/15 20:36, 28F
→
02/15 20:38, , 29F
02/15 20:38, 29F
→
02/15 20:38, , 30F
02/15 20:38, 30F
→
02/15 20:50, , 31F
02/15 20:50, 31F
→
02/15 20:51, , 32F
02/15 20:51, 32F
→
02/15 20:55, , 33F
02/15 20:55, 33F
→
02/15 21:09, , 34F
02/15 21:09, 34F
→
02/15 21:10, , 35F
02/15 21:10, 35F
推
02/15 21:17, , 36F
02/15 21:17, 36F
→
02/15 21:18, , 37F
02/15 21:18, 37F
→
02/15 21:18, , 38F
02/15 21:18, 38F
→
02/15 21:19, , 39F
02/15 21:19, 39F
→
02/15 21:19, , 40F
02/15 21:19, 40F
→
02/15 21:56, , 41F
02/15 21:56, 41F