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
'ProgramingTip' 카테고리의 다른 글
실행되지 않은 코드가 주석 처리되면 Java 프로그램이 느리게 실행됩니다. (0) | 2020.12.25 |
---|---|
리터럴을 만드는 방법 : 클래스 (0) | 2020.12.25 |
JavaScript : 좋은 부분 -`new`를 전혀 사용하지 않는 방법 (0) | 2020.12.25 |
CMAKE_MAKE_PROGRAM을 사용할 수 없습니다. (0) | 2020.12.25 |
autoreleasepool이란 무엇입니까? (0) | 2020.12.25 |