나는 std :: string과 std :: wstring에 대해 모두 알고 있지만 UTF-8과 UTF-16의 확장 된 문자 인코딩에는 신경을 쓰지 않는 것 같다. UTF-32도 지원되지 않습니다.유니 코드를 올바르게 처리하는 STL 문자열 클래스가 있습니까?
전체 UTF-8, UTF-16 및 UTF-32 지원을 제공하는 교차 플랫폼 드롭 인 대체 클래스를 아는 사람이 있습니까?
나는 std :: string과 std :: wstring에 대해 모두 알고 있지만 UTF-8과 UTF-16의 확장 된 문자 인코딩에는 신경을 쓰지 않는 것 같다. UTF-32도 지원되지 않습니다.유니 코드를 올바르게 처리하는 STL 문자열 클래스가 있습니까?
전체 UTF-8, UTF-16 및 UTF-32 지원을 제공하는 교차 플랫폼 드롭 인 대체 클래스를 아는 사람이 있습니까?
를 ++ 클래스는 표준 : u32string 및 표준 : u16string있다 0X. GCC는 이미 부분적으로 지원하고 있으므로 이미 사용할 수 있지만 유니 코드에 대한 스트림 지원은 아직 수행되지 않았습니다 Unicode support in C++0x.
STL에는 UTF-8이 지원되지 않습니다. 대안 youo이 boost codecvt을 사용할 수 있습니다으로 : C에서 잘
//...
// My encoding type
typedef wchar_t ucs4_t;
std::locale old_locale;
std::locale utf8_locale(old_locale,new utf8_codecvt_facet<ucs4_t>);
// Set a New global locale
std::locale::global(utf8_locale);
// Send the UCS-4 data out, converting to UTF-8
{
std::wstringstream oss;
oss.imbue(utf8_locale);
std::copy(ucs4_data.begin(),ucs4_data.end(),
std::ostream_iterator<ucs4_t,ucs4_t>(oss));
std::wcout << oss.str() << std::endl;
}
그 대신 정말로 sropin을 대체하지는 않습니다.) 이상하게도보고 싶습니다. std :: string8, std :: string16 및 std :: string32와 같은 것입니다 ... – Goz
UTF-8 지원의 경우 Glib::ustring 클래스가 있습니다. std::string
을 모델로하지만 utf-8을 인식합니다 (예 : iterator로 문자열을 스캔 할 때. 또한 몇 가지 제한 사항이 있습니다 (예 : 이터레이터는 항상 const
이고, 문자를 대체하면 문자열의 길이를 변경할 수 있으므로 다른 이터레이터를 무효화 할 수 있습니다.
ustring
은 다른 인코딩을 utf-8로 자동 변환하지 않으므로 Glib
라이브러리의 경우 다양한 conversion functions이 있습니다. 문자열이 유효한 utf-8인지 여부를 확인할 수 있습니다.
또한, ustring
및 std::string
즉 ustring
는 수 std 캐스트 연산자를 가지고, 상호 교환 :: ustring
을 구축 할 수있는 문자열을 사용하면, 그 반대의 과정 std::string
이 예상되는 매개 변수로 ustring
을 통과 할 수 있도록 std::string
에서
거의 완벽합니다. 수치스러운 16 및 32 비트 유니 코드 지원에 대한 수치심 ... – Goz
http://grigory.info/UTF8Strings.About.html도보세요. UTF8 네이티브입니다.
흠, 나는 새로운 표준에서 주목하지 않았습니다. 매우 흥미로운. C++ 0x 지원이 부족한 컴파일러 (예 : iPhone 컴파일러)에서 사용할 수 없다는 큰 수치가 있습니다. 이 클래스들이 이미 존재하지 않는다는 것이 진정으로 충격적입니다 ... – Goz
흥미롭게도, GCC> 4.4와 VS2010이 모두이를 지원하는 것 같습니다. 어느 것이 훌륭합니다. Windows, Linux 및 Android 모바일 플랫폼을 다루는 주요 플랫폼에서Clang은 또한 "많은"예제가 작동한다고 말합니다 ... – Goz
@Goz 글쎄, 모든 것이 당신만큼 좋지는 않습니다. VS2010은 유니 코드 문자열을 지원하지만 유니 코드 문자열 리터럴을 지원하지 않습니다. u "Hello"는 UTF-16 문자열 리터럴이고 U "Hello"는 UTF-32 리터럴입니다. 비주얼 스튜디오에서 그들을 인식하지 못합니다. 또한 gcc가 입력을 지원하지 않는다고 이미 말했듯이 출력 스트림은 아직 없습니다. – UmmaGumma