ProgramingTip

std :: string을 UTF-8 텍스트 파일에 쓰는 방법

bestdevel 2020. 12. 25. 10:29
반응형

std :: string을 UTF-8 텍스트 파일에 쓰는 방법


C ++로 텍스트 파일에 몇 개의 간단한 줄을 작성하고 싶지만 UTF-8로 인코딩되기를 원합니다. 그렇게하는 가장 간단한 방법은 무엇입니까?


UTF-8 영향을 미치는에 유일한 방법은 std::string그가있다 size(), length()모든 인덱스 바이트가 아닌 문자로 측정 됩니다 .

그리고 sbi가 지적했듯이에서 제공하는 반복해서 증가라고 문자가 아닌 std::string바이트 단위로 앞으로 나아갈 수 있기 때문에 멀티 바이트 UTF-8 코드의 중간을 가리킬 수 있습니다. 표준 라이브러리에는 UTF-8 인식 반복기가 제공되지 않지만 'Net.

당신이 그것을 기억한다면, 당신은 std::string일반적인 방식으로 UTF-8을 사용하는 방식 , 파일에 쓰는 등의 모든 것을 사용할 수 있습니다 ( std::string내가 UTF-8없이 사용하는 방식을 의미합니다 ).

다른 프로그램에서 UTF-8임을 알 수있는 바이트 순서 표시로 파일을 시작할 수 있습니다.


C ++에서 utf8로 작업 할 수있는 멋진 작은 라이브러리가 있습니다. utfcpp


libiconv 는 모든 인코딩 및 요구 사항을 훌륭한 라이브러리입니다.

Windows를 사용하는 경우 WideCharToMultiByte 를 사용하고 UTF8을 원하는 용도로 사용할 수 있습니다.


그렇게하는 가장 간단한 방법은 무엇입니까?

C ++에서 utf8을 가장 쉽게 처리하는 방법 std::string . 인터넷에 여전히 하나가 없기 때문에 직접 구현했습니다.

tinyutf8 (편집 : 이제 Github).

이 라이브러리는 매우 가벼운 드롭 인 사전 배치를 제공합니다 std::string(원하는 또는 std::u32string경우 해당 문자 대신 코드 포인트 를 반복하기 때문에 ). Ity는 매우 견고하면서도 빠른 액세스와 작은 메모리 소비 사이에서 여러 액세스로 구현됩니다. '유효하지 않은'UTF8 시퀀스에 대한 보수 견고성은 ANSI (0-255)와 거의 완전히 호환됩니다.

도움이 되셨기를 바랍니다!


"단순"이란 ASCII를 의미하는 경우 ASCII 값이 127 이하인 문자는 UTF-8에서 동일하게 인코딩을 수행 할 필요가 없습니다.


std::wstring text = L"Привет";
QString qstr = QString::fromStdWString(text);
QByteArray byteArray(qstr.toUtf8());    
std::string str_std( byteArray.constData(), byteArray.length());

내 환경 설정을 사용하여 파일로 작성하는 경우 내부적으로 코드 포인트와 표준 : u32string 및 직장에서 변환 비용, 다음 UTF8로 변환입니다. 내가 GitHub의에 넣어 변환 반복자.

#include <utf/utf.h>

int main()
{
    using namespace utf;

    u32string u32_text = U"ɦΈ˪˪ʘ";
    // do stuff with string
    // convert to utf8 string
    utf32_to_utf8_iterator<u32string::iterator> pos(u32_text.begin());
    utf32_to_utf8_iterator<u32string::iterator> end(u32_text.end());

    u8string u8_text(pos, end);

    // write out utf8 to file.
    // ...
}

사용 입심 :: ustring 에서 glibmm .

유일하게 널리 퍼진 UTF-8 패키지 컨테이너 (AFAIK)입니다. 글리프 (바이트가 아님) 기반이지만 std::string포트는 단순 검색 및 교체 집 하는 것과 동일한 메소드 가지고 있습니다 (데이터를 사용하기 전에 데이터가 유효한 UTF-8인지 확인하십시오 ustring).


UTF-8은 다중 메시지가 발생하며 이것이 나쁜 생각입니다. 대신 일반 코드를 사용하십시오.

그래서 내 생각에 가장 좋은 코딩 세트와 함께 일반 ASCII 문자 텍스트를 사용하는 것입니다. 하나의 다른 기호 (언어) 세트를 2 개 이상 사용하는 경우 유니 코드를 사용합니다.

다소 드문 경우입니다. 대부분의 경우 2 세트의 기호가 충분합니다. 이 일반적인 경우에는 유니 코드가 아닌 ASCII 문자를 사용하십시오.

UTF-8과 같은 다중 문자를 사용하면 중국 전통, 아랍어 또는 일부 상형 문자 만 얻을 수 있습니다. 매우 드문 경우입니다 !!!

나는 많은 사람들이 그것을 필요로 생각하지 않습니다. 따라서 절대 UTF-8을 사용하지 않습니다. 두통이 심한 두통을 피할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/3011082/how-to-write-a-stdstring-to-a-utf-8-text-file

반응형