2016-04-13 3 views
3

Ich kann UTF-16 oder eine beliebige Form davon nicht als Gebietsschema auf meiner Linux-Box festlegen. Der Beispielcode für dieses:Konnte UTF-16 nicht als Gebietsschema festlegen

#include <iostream> 
#include <string.h> 
#include <locale.h> 

using namespace std; 

int main() 
{ 
    char *ret = std::setlocale(LC_ALL, "en_US.utf16"); 
    if (ret) { 
     cout << ret << endl; 
    } 
    return 0; 
} 

Der Ausgang druckt nicht die locale Satz, was bedeutet, dass gewünschte locale wurde nicht gesetzt.

Die Liste der unterstützten Ländereinstellungen auf der Box enthält keine Form der UTF-16-Codierung. Ich habe dies über locale -a

$ uname -a 
Linux developer.com 2.6.32-279.1.1.el6.x86_64 #1 SMP Tue Jul 10 11:24:23 CDT 2012 x86_64 x86_64 x86_64 GNU/Linux 

Hat etwas zu verwenden, UTF-16 auf der Box installiert werden müssen?

Antwort

5

Sie können UTF-16 nicht als Gebietsschema in Linux festlegen, da UTF-16 nicht ASCII-kompatibel ist. C-Strings sind Null abgeschlossen und als UTF-16 können eingebettete nul Zeichen enthalten, die nicht funktionieren. Sie müssen bei UTF-8 bleiben.

Wenn Sie mehr Gebietsschemas erzeugen möchten, als Ihr System derzeit hat, sehen Sie sich /etc/locale.gen an, bearbeiten Sie diese Datei, und führen Sie (als root) den Befehl locale-gen aus, um die neu eingefügten Gebietsschemas zu generieren. Aber Vorsicht: Auch hier können Sie UTF-16 nicht erzeugen!

Verwandte Themen