codecvt
Třída
Šablona třídy, která popisuje objekt, který může sloužit jako omezující vlastnost národního prostředí. Může řídit převody mezi sekvencí hodnot používaných ke kódování znaků v programu a posloupnosti hodnot používaných ke kódování znaků mimo program.
Syntaxe
template <class CharType, class Byte, class StateType>
class codecvt : public locale::facet, codecvt_base;
Parametry
CharType
Typ používaný v rámci programu ke kódování znaků.
Byte
Typ použitý ke kódování znaků mimo program.
StateType
Typ, který lze použít k reprezentaci průběžných stavů převodu mezi interními a externími typy znázornění znaků.
Poznámky
Šablona třídy popisuje objekt, který může sloužit jako omezující vlastnost národního prostředí, k řízení převodů mezi posloupností hodnot typu CharType
a posloupností hodnot typu Byte
. Třída StateType
charakterizuje transformaci - a objekt třídy StateType
ukládá všechny nezbytné informace o stavu během převodu.
Vnitřní kódování používá reprezentaci s pevným počtem bajtů na znak, obvykle typ char
nebo typ wchar_t
.
Stejně jako u jakékoli omezující vlastnosti národního prostředí má statický objekt id
počáteční uloženou hodnotu nuly. První pokus o přístup k uložené hodnotě ukládá jedinečnou kladnou hodnotu v id
.
Verze šablony do_in
a do_out
vždy vrátit codecvt_base::noconv
.
Standardní knihovna C++ definuje několik explicitních specializace:
template<>
codecvt<wchar_t, char, mbstate_t>
převede mezi wchar_t
sekvencemi a char
sekvencemi.
template<>
codecvt<char16_t, char, mbstate_t>
převádí mezi char16_t
sekvencemi kódovanými jako UTF-16 a char
sekvencemi kódovanými jako UTF-8.
template<>
codecvt<char32_t, char, mbstate_t>
převádí mezi char32_t
sekvencemi kódovanými jako UTF-32 (UCS-4) a char
sekvencemi kódovanými jako UTF-8.
Konstruktory
Konstruktor | Popis |
---|---|
codecvt |
Konstruktor pro objekty třídy codecvt , které slouží jako omezující vlastnost národního prostředí pro zpracování převodů. |
Typedefs
Název typu | Popis |
---|---|
extern_type |
Typ znaku, který se používá pro externí reprezentace. |
intern_type |
Typ znaku, který se používá pro interní reprezentace. |
state_type |
Typ znaku, který se používá k reprezentaci průběžných stavů během převodu mezi interními a externími znázorněními. |
Členské funkce
Členová funkce | Popis |
---|---|
always_noconv |
Ověřuje, zda je nutné provést nějaké převody. |
do_always_noconv |
Virtuální funkce volaná k ověření, zda je nutné provést nějaké převody. |
do_encoding |
Virtuální funkce, která testuje, jestli je kódování streamu Byte závislé na stavu, zda je poměr mezi Byte hodnotami použitými a CharType vytvořenými hodnotami konstantní, a pokud ano, určuje hodnotu tohoto poměru. |
do_in |
Virtuální funkce volaná k převodu posloupnosti vnitřních Byte hodnot na sekvenci externích CharType hodnot. |
do_length |
Virtuální funkce, která určuje, kolik Byte hodnot z dané sekvence externích Byte hodnot nevygeneruje více než daný počet vnitřních CharType hodnot a vrátí tento počet Byte hodnot. |
do_max_length |
Virtuální funkce, která vrací maximální počet externích bajtů nezbytných k vytvoření jednoho interního CharType . |
do_out |
Virtuální funkce volaná k převodu posloupnosti vnitřních CharType hodnot na sekvenci externích bajtů. |
do_unshift |
Virtuální funkce volaná k poskytnutí Byte hodnot potřebných při převodu závislém na stavu k dokončení posledního znaku v posloupnosti Byte hodnot. |
encoding |
Testuje, jestli je kódování datového Byte proudu závislé na stavu, zda je poměr mezi Byte použitými hodnotami a CharType hodnotami produkovaných konstantní, a pokud ano, určuje hodnotu tohoto poměru. |
in |
Převede externí reprezentaci sekvence Byte hodnot na vnitřní reprezentaci sekvence CharType hodnot. |
length |
Určuje, kolik Byte hodnot z dané sekvence externích Byte hodnot nevygeneruje více než daný počet vnitřních CharType hodnot a vrátí tento Byte počet hodnot. |
max_length |
Vrátí maximální počet externích Byte hodnot potřebných k vytvoření jedné vnitřní CharType hodnoty . |
out |
Převede sekvenci vnitřních CharType hodnot na sekvenci externích Byte hodnot. |
unshift |
Poskytuje externí Byte hodnoty potřebné při převodu závislém na stavu k dokončení posledního znaku v posloupnosti Byte hodnot. |
Požadavky
Záhlaví: <locale>
Obor názvů: std
codecvt::always_noconv
Testuje, zda není nutné provádět žádné převody.
bool always_noconv() const throw();
Návratová hodnota
Logická hodnota, která je true
v případě, že není nutné provádět žádné převody. false
Pokud je potřeba provést aspoň jednu hodnotu.
Poznámky
Členová funkce vrátí do_always_noconv
.
Příklad
// codecvt_always_noconv.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;
int main( )
{
locale loc ( "German_Germany" );
bool result1 = use_facet<codecvt<char, char, mbstate_t>>
( loc ).always_noconv( );
if ( result1 )
cout << "No conversion is needed." << '\n';
else
cout << "At least one conversion is required." << '\n';
bool result2 = use_facet<codecvt<wchar_t, char, mbstate_t>>
( loc ).always_noconv( );
if ( result2 )
cout << "No conversion is needed." << '\n';
else
cout << "At least one conversion is required." << '\n';
}
No conversion is needed.
At least one conversion is required.
codecvt::codecvt
Konstruktor pro objekty kodeku třídy, které slouží jako omezující vlastnost národního prostředí pro zpracování převodů.
explicit codecvt(size_t refs = 0);
Parametry
refs
Celočíselná hodnota použitá k určení typu správy paměti pro objekt.
Poznámky
Možné hodnoty parametru refs
a jejich významnosti jsou:
0: Životnost objektu je spravována národními prostředími, které ho obsahují.
1: Životnost objektu musí být spravována ručně.
2: Tyto hodnoty nejsou definovány.
Konstruktor inicializuje svůj locale::facet
základní objekt s locale::facet
(refs)
.
codecvt::do_always_noconv
Virtuální funkce volaná k otestování, jestli není potřeba provádět žádné převody.
virtual bool do_always_noconv() const throw();
Návratová hodnota
Chráněná virtuální členová funkce vrátí true
pouze v případě, že každé volání do_in
nebo do_out
vrátí .noconv
Verze šablony vždy vrátí true
.
Příklad
Podívejte se na příklad always_noconv
, který volá do_always_noconv
.
codecvt::do_encoding
Virtuální funkce, která testuje, jestli je kódování streamu Byte
závislé na stavu, zda je poměr mezi Byte
hodnotami použitými a CharType
produkovaných hodnotami konstantní a pokud ano, určuje hodnotu tohoto poměru.
virtual int do_encoding() const throw();
Návratová hodnota
Chráněná virtuální členová funkce vrátí:
-1, pokud je kódování sekvencí typu
extern_type
závislé na stavu.0, pokud kódování zahrnuje sekvence různých délek.
N
, pokud kódování zahrnuje pouze sekvence délkyN
Příklad
Podívejte se na příklad kódování, který volá do_encoding
.
codecvt::d o_in
Virtuální funkce volaná k převodu sekvence externích Byte
hodnot na sekvenci vnitřních CharType
hodnot.
virtual result do_in(
StateType& state,
const Byte* first1,
const Byte* last1,
const Byte*& next1,
CharType* first2,
CharType* last2,
CharType*& next2,) const;
Parametry
state
Stav převodu, který se udržuje mezi voláními členské funkce.
first1
Ukazatel na začátek sekvence, která se má převést.
last1
Ukazatel na konec sekvence, která se má převést.
next1
Ukazatel nad konec převedené sekvence na první nepřevrácený znak.
first2
Ukazatel na začátek převedené sekvence
last2
Ukazatel na konec převedené sekvence.
next2
Ukazatel na CharType
ten, který přichází po posledním převodu CharType
, na první nealterovaný znak v cílové sekvenci.
Návratová hodnota
Návrat, který označuje úspěch, částečný úspěch nebo selhání operace. Funkce vrátí:
codecvt_base::error
pokud je zdrojová sekvence špatně vytvořena.codecvt_base::noconv
pokud funkce neprovádí žádný převod.codecvt_base::ok
pokud převod proběhne úspěšně.codecvt_base::partial
pokud zdroj není dostatečný nebo pokud cíl není dostatečně velký, aby převod proběhl úspěšně.
Poznámky
state
musí představovat počáteční stav převodu na začátku nové zdrojové sekvence. Funkce mění uloženou hodnotu podle potřeby tak, aby odrážela aktuální stav úspěšného převodu. Jeho uložená hodnota je jinak nezadaná.
Příklad
Podívejte se na příklad in
, který volá do_in
.
codecvt::do_length
Virtuální funkce, která určuje, kolik Byte
hodnot z dané sekvence externích Byte
hodnot nevygeneruje více než daný počet vnitřních CharType
hodnot a vrátí tento počet Byte
hodnot.
virtual int do_length(
const StateType& state,
const Byte* first1,
const Byte* last1,
size_t len2) const;
Parametry
state
Stav převodu, který se udržuje mezi voláními členské funkce.
first1
Ukazatel na začátek externí sekvence.
last1
Ukazatel na konec externí sekvence
len2
Maximální počet Byte
hodnot, které může členová funkce vrátit.
Návratová hodnota
Celé číslo, které představuje počet maximálního počtu převodů, ne větší než len2 definovaný externím zdrojovým pořadím na [ first1
, last1
).
Poznámky
Chráněná virtuální členová funkce efektivně volá do_in( state, first1, last1, next1, buf, buf + len2, next2)
stav (kopii stavu), některé vyrovnávací paměti buf
a ukazatele next1
a next2
.
Pak se vrátí next2
- buf
. Spočítá maximální počet převodů, ne větší než délka2 definovaný zdrojová posloupnost na [ first1
, last1
).
Verze šablony vždy vrací menší hodnotu last1
- first1
a .len2
Příklad
Podívejte se na příklad length
, který volá do_length
.
codecvt::do_max_length
Virtuální funkce, která vrací maximální počet externích Byte
hodnot potřebných k vytvoření jedné vnitřní CharType
.
virtual int do_max_length() const throw();
Návratová hodnota
Maximální počet hodnot potřebných Byte
k vytvoření jednoho CharType
.
Poznámky
Chráněná virtuální členová funkce vrátí největší povolenou hodnotu, kterou lze vrátit do_length
( first1, last1, 1)
pro libovolné platné hodnoty first1
a last1
.
Příklad
Podívejte se na příklad max_length
, který volá do_max_length
.
codecvt::do_out
Virtuální funkce volaná k převodu posloupnosti vnitřních CharType
hodnot na sekvenci externích Byte
hodnot.
virtual result do_out(
StateType& state,
const CharType* first1,
const CharType* last1,
const CharType*& next1,
Byte* first2,
Byte* last2,
Byte*& next2) const;
Parametry
state
Stav převodu, který se udržuje mezi voláními členské funkce.
first1
Ukazatel na začátek sekvence, která se má převést.
last1
Ukazatel na konec sekvence, která se má převést.
next1
Odkaz na ukazatel na první nepřevrácený CharType
ukazatel po posledním CharType
převodu.
first2
Ukazatel na začátek převedené sekvence
last2
Ukazatel na konec převedené sekvence.
next2
Odkaz na ukazatel na první nepřevrácený Byte
ukazatel po posledním Byte
převodu.
Návratová hodnota
Funkce vrátí:
codecvt_base::error
pokud je zdrojová sekvence špatně vytvořena.codecvt_base::noconv
pokud funkce neprovádí žádný převod.codecvt_base::ok
pokud převod proběhne úspěšně.codecvt_base::partial
pokud zdroj není dostatečný nebo pokud cíl není dostatečně velký, aby převod mohl proběhnout úspěšně.
Poznámky
state
musí představovat počáteční stav převodu na začátku nové zdrojové sekvence. Funkce mění uloženou hodnotu podle potřeby tak, aby odrážela aktuální stav úspěšného převodu. Jeho uložená hodnota je jinak nezadaná.
Příklad
Podívejte se na příklad , který volá do_out
.
codecvt::do_unshift
Virtuální funkce volaná k poskytnutí Byte
hodnot potřebných při převodu závislém na stavu k dokončení posledního znaku v posloupnosti Byte
hodnot.
virtual result do_unshift(
StateType& state,
Byte* first2,
Byte* last2,
Byte*& next2) const;
Parametry
state
Stav převodu, který se udržuje mezi voláními členské funkce.
first2
Ukazatel na první pozici v cílovém rozsahu.
last2
Ukazatel na poslední pozici v cílovém rozsahu.
next2
Ukazatel na první nealterovaný prvek v cílové sekvenci.
Návratová hodnota
Funkce vrátí:
codecvt_base::error
Pokud stav představuje neplatný stavcodecvt_base::noconv
pokud funkce neprovádí převodcodecvt_base::ok
Pokud převod proběhne úspěšněcodecvt_base::partial
Pokud cíl není dostatečně velký, aby převod mohl proběhnout úspěšně
Poznámky
Chráněná virtuální členová funkce se pokusí převést zdrojový prvek CharType
(0) na cílovou sekvenci, kterou ukládá v [ first2
, last2
s výjimkou ukončujícího prvku Byte
(0). Vždy se ukládá v next2
ukazateli na první nealterovaný prvek v cílové sekvenci.
State
musí představovat počáteční stav převodu na začátku nové zdrojové sekvence. Funkce mění uloženou hodnotu podle potřeby tak, aby odrážela aktuální stav úspěšného převodu. Převod zdrojového prvku CharType
(0) obvykle ponechá aktuální stav v počátečním stavu převodu.
Příklad
Podívejte se na příklad unshift
, který volá do_unshift
.
codecvt::encoding
Testuje, jestli je kódování datového Byte
proudu závislé na stavu, zda je poměr mezi Byte
použitými hodnotami a CharType
hodnotami produkovaných konstantní, a pokud ano, určuje hodnotu tohoto poměru.
int encoding() const throw();
Návratová hodnota
Pokud je vrácená hodnota kladná, jedná se o konstantní počet znaků potřebných Byte
k vytvoření znaku CharType
.
Chráněná virtuální členová funkce vrátí:
-1, pokud je kódování sekvencí typu
extern_type
závislé na stavu.0, pokud kódování zahrnuje sekvence různých délek.
N
, pokud kódování zahrnuje pouze sekvence délkyN
.
Poznámky
Členová funkce vrátí do_encoding.
Příklad
// codecvt_encoding.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;
int main( )
{
locale loc ( "German_Germany" );
int result1 = use_facet<codecvt<char, char, mbstate_t>> ( loc ).encoding ( );
cout << result1 << '\n';
result1 = use_facet<codecvt<wchar_t, char, mbstate_t>> ( loc ).encoding( );
cout << result1 << '\n';
result1 = use_facet<codecvt<char, wchar_t, mbstate_t>> ( loc ).encoding( );
cout << result1 << '\n';
}
1
1
1
codecvt::extern_type
Typ znaku, který se používá pro externí reprezentace.
typedef Byte extern_type;
Poznámky
Typ je synonymem pro parametr Byte
šablony .
codecvt::in
Převede externí reprezentaci sekvence Byte
hodnot na vnitřní reprezentaci sekvence CharType
hodnot.
result in(
StateType& state,
const Byte* first1,
const Byte* last1,
const Byte*& next1,
CharType* first2,
CharType* last2,
CharType*& next2,) const;
Parametry
state
Stav převodu, který se udržuje mezi voláními členské funkce.
first1
Ukazatel na začátek sekvence, která se má převést.
last1
Ukazatel na konec sekvence, která se má převést.
next1
Ukazatel nad konec převedené sekvence na první nekonvertovaný znak.
first2
Ukazatel na začátek převedené sekvence
last2
Ukazatel na konec převedené sekvence.
next2
Ukazatel na CharType
ten, který následuje po posledním převodu Chartype
na první nealterovaný znak v cílové sekvenci.
Návratová hodnota
Návrat, který označuje úspěch, částečný úspěch nebo selhání operace. Funkce vrátí:
codecvt_base::error
pokud je zdrojová sekvence špatně vytvořena.codecvt_base::noconv
pokud funkce neprovádí žádný převod.codecvt_base::ok
pokud převod proběhne úspěšně.codecvt_base::partial
pokud zdroj není dostatečný nebo pokud cíl není dostatečně velký, aby převod mohl proběhnout úspěšně.
Poznámky
state
musí představovat počáteční stav převodu na začátku nové zdrojové sekvence. Funkce podle potřeby změní uloženou hodnotu tak, aby odrážela aktuální stav úspěšného převodu. Po částečném převodu je nutné nastavit, state
aby se převod mohl obnovit při přijetí nových znaků.
Členová funkce vrátí do_in
( state, first1, last1, next1, first2, last2, next2)
.
Příklad
// codecvt_in.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
using namespace std;
#define LEN 90
int main( )
{
const char* pszExt = "This is the string to be converted!";
wchar_t pwszInt [LEN+1];
memset(&pwszInt[0], 0, (sizeof(wchar_t))*(LEN+1));
const char* pszNext;
wchar_t* pwszNext;
mbstate_t state = {0}; // zero-initialization represents the initial conversion state for mbstate_t
locale loc("C");//English_Britain");//German_Germany
int res = use_facet<codecvt<wchar_t, char, mbstate_t>>
( loc ).in( state,
pszExt, &pszExt[strlen(pszExt)], pszNext,
pwszInt, &pwszInt[strlen(pszExt)], pwszNext );
pwszInt[strlen(pszExt)] = 0;
wcout << ( res!=codecvt_base::error ? L"It worked! " : L"It didn't work! " )
<< L"The converted string is:\n ["
<< &pwszInt[0]
<< L"]" << '\n';
exit(-1);
}
It worked! The converted string is:
[This is the string to be converted!]
codecvt::intern_type
Typ znaku, který se používá pro interní reprezentace.
typedef CharType intern_type;
Poznámky
Typ je synonymem pro parametr CharType
šablony .
codecvt::length
Určuje, kolik Byte
hodnot z dané sekvence externích Byte
hodnot nevygeneruje více než daný počet vnitřních CharType
hodnot a vrátí tento Byte
počet hodnot.
int length(
const StateType& state,
const Byte* first1,
const Byte* last1,
size_t len2) const;
Parametry
state
Stav převodu, který se udržuje mezi voláními členské funkce.
first1
Ukazatel na začátek externí sekvence.
last1
Ukazatel na konec externí sekvence
len2
Maximální počet bajtů, které může členová funkce vrátit.
Návratová hodnota
Celé číslo, které představuje počet maximálního počtu převodů, nikoli větší než len2
, definovaný externím zdrojovým pořadím na [ first1
, last1
).
Poznámky
Členová funkce vrátí do_length
( state, first1, last1, len2)
.
Příklad
// codecvt_length.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
using namespace std;
#define LEN 90
int main( )
{
const char* pszExt = "This is the string whose length is to be measured!";
mbstate_t state = {0}; // zero-initialization represents the initial conversion state for mbstate_t
locale loc("C"); // English_Britain"); //German_Germany
int res = use_facet<codecvt<wchar_t, char, mbstate_t>>
( loc ).length( state,
pszExt, &pszExt[strlen(pszExt)], LEN );
cout << "The length of the string is: ";
wcout << res;
cout << "." << '\n';
exit(-1);
}
The length of the string is: 50.
codecvt::max_length
Vrátí maximální počet externích Byte
hodnot potřebných k vytvoření jedné vnitřní CharType
hodnoty .
int max_length() const throw();
Návratová hodnota
Maximální počet hodnot potřebných Byte
k vytvoření jednoho CharType
.
Poznámky
Členová funkce vrátí do_max_length
.
Příklad
// codecvt_max_length.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
using namespace std;
int main( )
{
locale loc( "C");//English_Britain" );//German_Germany
int res = use_facet<codecvt<char, char, mbstate_t>>
( loc ).max_length( );
wcout << res << '\n';
}
1
codecvt::out
Převede sekvenci vnitřních CharType
hodnot na sekvenci externích Byte
hodnot.
result out(
StateType& state,
const CharType* first1,
const CharType* last1,
const CharType*& next1,
Byte* first2,
Byte* last2,
Byte*& next2) const;
Parametry
state
Stav převodu, který se udržuje mezi voláními členské funkce.
first1
Ukazatel na začátek sekvence, která se má převést.
last1
Ukazatel na konec sekvence, která se má převést.
next1
Odkaz na ukazatel na první nepřekonvertovaný CharType
po posledním CharType
převodu.
first2
Ukazatel na začátek převedené sekvence
last2
Ukazatel na konec převedené sekvence.
next2
Odkaz na ukazatel na první nepřevrácený Byte
po posledním převodu Byte
.
Návratová hodnota
Členová funkce vrátí do_out
( state, first1, last1, next1, first2, last2, next2)
.
Poznámky
Další informace najdete na webu codecvt::do_out
.
Příklad
// codecvt_out.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
#include <wchar.h>
using namespace std;
#define LEN 90
int main( )
{
char pszExt[LEN + 1];
const wchar_t* pwszInt = L"This is the wchar_t string to be converted.";
memset(&pszExt[0], 0, (sizeof(char)) * (LEN + 1));
char* pszNext;
const wchar_t* pwszNext;
mbstate_t state;
locale loc("C");//English_Britain");//German_Germany
int res = use_facet<codecvt<wchar_t, char, mbstate_t>>
(loc).out(state,
pwszInt, &pwszInt[wcslen(pwszInt)], pwszNext,
pszExt, &pszExt[wcslen(pwszInt)], pszNext);
pszExt[wcslen(pwszInt)] = 0;
cout << (res != codecvt_base::error ? "It worked: " : "It didn't work: ")
<< "The converted string is:\n ["
<< &pszExt[0]
<< "]" << '\n';
}
It worked: The converted string is:
[This is the wchar_t string to be converted.]
codecvt::state_type
Typ znaku, který se používá k reprezentaci průběžných stavů během převodu mezi interními a externími znázorněními.
typedef StateType state_type;
Poznámky
Typ je synonymem pro parametr StateType
šablony .
codecvt::unshift
Byte
Poskytuje hodnoty potřebné při převodu závislém na stavu k dokončení posledního znaku v posloupnosti Byte
hodnot.
result unshift(
StateType& state,
Byte* first2,
Byte* last2,
Byte*& next2) const;
Parametry
state
Stav převodu, který se udržuje mezi voláními členské funkce.
first2
Ukazatel na první pozici v cílovém rozsahu.
last2
Ukazatel na poslední pozici v cílovém rozsahu.
next2
Ukazatel na první nealterovaný prvek v cílové sekvenci.
Návratová hodnota
Funkce vrátí:
codecvt_base::error
pokud stav představuje neplatný stav.codecvt_base::noconv
pokud funkce neprovádí žádný převod.codecvt_base::ok
pokud převod proběhne úspěšně.codecvt_base::partial
pokud cíl není dostatečně velký, aby převod mohl proběhnout úspěšně.
Poznámky
Chráněná virtuální členová funkce se pokusí převést zdrojový prvek CharType
(0) na cílovou sekvenci, kterou ukládá v [ first2
, last2
s výjimkou ukončujícího prvku Byte
(0). Vždy se ukládá v next2
ukazateli na první nealterovaný prvek v cílové sekvenci.
state
musí představovat počáteční stav převodu na začátku nové zdrojové sekvence. Funkce podle potřeby změní uloženou hodnotu tak, aby odrážela aktuální stav úspěšného převodu. Převod zdrojového prvku CharType
(0) obvykle ponechá aktuální stav v počátečním stavu převodu.
Členová funkce vrátí do_unshift
( state, first2, last2, next2 )
.
Viz také
<locale>
Znakové stránky
Názvy národních prostředí, jazyky a řetězce země/oblasti
Bezpečný přístup z více vláken ve standardní knihovně C++