Ich würde gerne verstehen, wie reguläre std::string
und std::map
Operationen mit Unicode-Code-Einheiten beschäftigen, sollten sie in der Zeichenfolge vorhanden sein.Std :: String und Std :: Map-Operationen auf Unicode-String
Beispielcode:
include <iostream>
#include "sys/types.h"
using namespace std;
int main()
{
std::basic_string<u_int16_t> ustr1(std::basic_string<u_int16_t>((u_int16_t*)"ยฤขฃ", 4));
std::basic_string<u_int16_t> ustr2(std::basic_string<u_int16_t>((u_int16_t*)"abcd", 4));
for (int i = 0; i < ustr1.length(); i++)
cout << "Char: " << ustr1[i] << endl;
for (int i = 0; i < ustr2.length(); i++)
cout << "Char: " << ustr2[i] << endl;
if (ustr1 == ustr2)
cout << "Strings are equal" << endl;
cout << "string length: " << ustr1.length() << "\t" << ustr2.length() << endl;
return 0;
}
Die Saiten enthalten Thai Zeichen und ASCII-Zeichen, und die Absicht hinter basic_string<u_int16_t>
Verwendung ist die Speicherung von Zeichen zu erleichtern, die nicht innerhalb eines einzelnen Bytes untergebracht werden können. Der Code wurde auf einer Linux-Box ausgeführt, deren Codierungstyp ist. Die Ausgabe lautet:
$ ./a.out
Char: 47328
Char: 57506
Char: 42168
Char: 47328
Char: 25185
Char: 25699
Char: 17152
Char: 24936
string length: 4 4
Ein paar Fragen:
die Zeichenwerte in der Ausgabe
en_US.UTF-8
Codepunkte entsprechen? Wenn nicht, was sind sie?Würden die
std::string
Operatoren wie==
,!=
,<
usw. der Lage sein, mit Unicode-Codepunkten zu arbeiten? Wenn ja, wäre es ein bloßer Vergleich der einzelnen Codestellen an den entsprechenden Stellen? Würdestd::map
auf ähnlichen Linien arbeiten?Würde das Ändern der Ländereinstellung in UTF-16 dazu führen, dass die Zeichenfolgen als UTF-16-Codepunkte gespeichert werden?
Vielen Dank!
Warum nutzen Sie nicht 'std :: wstring'? – JVApen
@JVApen: Ich möchte das Verhalten im aktuellen Szenario verstehen. – Maddy
Ihre Umwandlungen von den String-Literalen ('char *') zu 'u_int16_t *' sind unsinnig. – MicroVirus