C++
Internationalisering i C ++
Sök…
Anmärkningar
C ++ -språket dikterar inte någon teckenuppsättning, vissa kompilatorer kan stödja användningen av UTF-8 eller till och med UTF-16. Det finns dock ingen säkerhet om att något utöver enkla ANSI / ASCII-tecken kommer att tillhandahållas.
Således är allt internationellt språkstöd implementeringsdefinierat, beroende på vilken plattform, operativsystem och kompilator du kanske använder.
Flera tredjepartsbibliotek (t.ex. International Unicode Committee Library) som kan användas för att utöka plattformens internationella stöd.
Förstå strängegenskaper för C ++
#include <iostream>
#include <string>
int main()
{
const char * C_String = "This is a line of text w";
const char * C_Problem_String = "This is a line of text ኚ";
std::string Std_String("This is a second line of text w");
std::string Std_Problem_String("This is a second line of ϯϵxϯ ኚ");
std::cout << "String Length: " << Std_String.length() << '\n';
std::cout << "String Length: " << Std_Problem_String.length() << '\n';
std::cout << "CString Length: " << strlen(C_String) << '\n';
std::cout << "CString Length: " << strlen(C_Problem_String) << '\n';
return 0;
}
Beroende på plattform (windows, OSX, etc) och kompilator (GCC, MSVC, etc), kan det här programmet misslyckas med att kompilera, visa olika värden eller visa samma värden .
Exempel på utdata under Microsoft MSVC-kompilatorn:
Stränglängd: 31
Stränglängd: 31
CString Längd: 24
CString Längd: 24
Detta visar att under MSVC betraktas var och en av de utvidgade tecknen som en enda "karaktär", och denna plattform stöder fullt ut internationaliserade språk.
Det bör dock noteras att detta beteende är ovanligt, dessa internationella karaktärer lagras internt som Unicode och är faktiskt flera byte långa. Detta kan orsaka oväntade fel
Under GNC / GCC-kompilatorn är programutgången:
Stränglängd: 31
Stränglängd: 36
CString Längd: 24
CString Längd: 26
Detta exempel visar att även om GCC-kompilatorn som används på denna (Linux) -plattform inte stöder dessa utökade tecken, använder den ( korrekt) flera byte för att lagra ett enskilt tecken.
I det här fallet är användningen av Unicode-tecken möjlig, men programmeraren måste vara noga med att komma ihåg att längden på en "sträng" i detta scenario är längden i byte , inte längden i läsbara tecken .
Dessa skillnader beror på hur internationella språk hanteras per plattform - och ännu viktigare är att C- och C ++ -strängarna som används i det här exemplet kan betraktas som en mängd byte , så att (för denna användning) C ++ -språket överväger ett tecken (char) för att vara en enda byte .