2014-09-09 11 views
1

Как сделать преобразования iconv для кодировок UTF- * без добавления байта порядка байтов?Преобразование символов с помощью значка без значка юникодного байта.

Проблема показан этот код, составленный с G ++ 4.8 в 64-битной Linux:

#include <iostream> 
#include <iconv.h> 
#include <cstdint> 
#include <iomanip> 
using namespace std; 

int main() { 
     const wchar_t *ws = L"Hello, world.\n"; 
     for(size_t ii = 0; ii < 15; ii++) { 
       cout << setw(2) << hex << uint32_t(ws[ii]) << " "; 
     } 
     cout << endl; 
     iconv_t conv = iconv_open("UTF-16", "UTF-32"); 
     char *outbuf = new char[14 * 4]; 
     char *inptr = const_cast<char*>(reinterpret_cast<const char *>(ws)); 
     char *outptr = outbuf; 
     size_t in_len = 14 * 4; 
     size_t out_len = 14 * 4; 
     size_t result = iconv(conv, &inptr, &in_len, &outptr, &out_len); 
     uint16_t *encoded = reinterpret_cast<uint16_t*>(outbuf); 
     for(size_t ii = 0; ii < 15; ii++) { 
       cout << setw(2) << hex << encoded[ii] << " "; 
     } 
     cout << endl; 
} 

Воспроизводит:

48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 2e a 0 
feff 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 2e a 

ясно показывая BOM в начале результирующей строки где его нет на

ответ