C 및 C++에서 utf8 문자열을 지원하는 간단한 단일 헤더 솔루션입니다.
C 헤더 string.h에서 제공되지만 str* 접두사 대신 utf8* 접두사가 있는 함수:
API 함수 문서
문자열.h | utf8.h | 완벽한 | C++14 constexpr |
---|---|---|---|
strcat | utf8cat | ✔ | |
strchr | utf8chr | ✔ | ✔ |
strcmp | utf8cmp | ✔ | ✔ |
strcoll | utf8coll | ||
strcpy | utf8cpy | ✔ | |
strcspn | utf8cspn | ✔ | ✔ |
strdup | utf8dup | ✔ | |
노력하다 | utf8fry | ||
strlen | utf8len | ✔ | ✔ |
strnlen | utf8nlen | ✔ | ✔ |
strncat | utf8ncat | ✔ | |
strncmp | utf8ncmp | ✔ | ✔ |
strncpy | utf8ncpy | ✔ | |
strndup | utf8ndup | ✔ | |
strpbrk | utf8pbrk | ✔ | ✔ |
strrchr | utf8rchr | ✔ | ✔ |
strsep | utf8sep | ||
strspn | utf8spn | ✔ | ✔ |
strstr | utf8str | ✔ | ✔ |
strtok | utf8tok | ||
strxfrm | utf8xfrm |
C 헤더 strings.h에서 제공되지만 str* 접두사 대신 utf8* 접두사가 있는 함수:
문자열.h | utf8.h | 완벽한 | C++14 constexpr |
---|---|---|---|
strcasecmp | utf8casecmp | ✔ | |
strncasecmp | utf8ncasecmp | ✔ | |
strcasestr | utf8casestr | ✔ |
utf8.h에 고유하게 제공되는 기능:
utf8.h | 완벽한 | C++14 constexpr |
---|---|---|
utf8코드포인트 | ✔ | ✔ |
utf8r코드포인트 | ✔ | ✔ |
utf8크기 | ✔ | ✔ |
utf8size_lazy | ✔ | ✔ |
utf8nsize_lazy | ✔ | ✔ |
utf8유효 | ✔ | ✔ |
utf8nvalid | ✔ | ✔ |
utf8makevalid | ✔ | |
utf8코드포인트 크기 | ✔ | ✔ |
utf8cat코드포인트 | ✔ | |
utf8isupper | ✔ | |
utf8islower | ✔ | |
utf8lwr | ||
utf8upr | ||
utf8lwrcodepoint | ✔ | |
utf8uprcodepoint | ✔ |
코드에 #include "utf8.h"
됩니다!
현재 지원되는 플랫폼은 Linux, macOS 및 Windows입니다.
현재 지원되는 컴파일러는 gcc, clang, MSVC의 cl.exe 및 clang-cl.exe입니다.
utf8.h API는 의도적으로 string.h API와 최대한 일치합니다. 하지만 몇 가지 주요 차이점이 있습니다.
utf8.h는 C++ 20에서 char* 대신 char8_t*를 사용합니다.
string.h 또는 strings.h 문서에서 '바이트'를 참조하는 곳이면 어디든 이를 utf8 코드 포인트로 변경했습니다. 예를 들어, utf8len은 utf8 문자열의 utf8 코드 포인트 수를 반환합니다. 이는 반드시 바이트 수와 동일하지는 않습니다.
int utf8casecmp ( const void * src1 , const void * src2 );
src1 < src2
, src1 == src2
, src1 > src2
인 경우 각각 0 미만, 0, 0보다 큰 값을 반환하며 대소문자를 구분하지 않습니다.
void * utf8cat ( void * dst , const void * src );
utf8 문자열 src
utf8 문자열 dst
에 추가합니다.
void * utf8chr ( const void * src , utf8_int32_t chr );
utf8 문자열 src
에서 utf8 코드포인트 chr
과 일치하는 첫 번째 항목을 찾습니다.
int utf8cmp ( const void * src1 , const void * src2 );
src1 < src2
인 경우 0보다 작은 값, 0, 0보다 큰 값을 반환합니다.
src1 == src2
, src1 > src2
각각.
void * utf8cpy ( void * dst , const void * src );
utf8 문자열 src
dst
에 할당된 메모리에 복사합니다.
size_t utf8cspn ( const void * src , const void * reject );
완전히 구성된 utf8 문자열 src
의 utf8 코드 포인트 수
utf8 reject
아닌 utf8 코드 포인트.
void * utf8dup ( const void * src );
크기를 가져오고 새 버퍼를 malloc
하여 utf8 문자열 src
복제합니다.
데이터를 복사하여 반환합니다. 또는 malloc
실패한 경우 0입니다.
size_t utf8len ( const void * str );
utf8 문자열 str
의 utf8 코드포인트 수,
null 종료 바이트는 제외됩니다 .
size_t utf8nlen ( const void * str , size_t n );
utf8len
과 유사하지만 최대 n
바이트의 src
만 검색된다는 점이 다릅니다.
int utf8ncasecmp ( const void * src1 , const void * src2 , size_t n );
src1 < src2
, src1 == src2
인 경우 0보다 작은 값, 0, 0보다 큰 값을 반환합니다.
src1 > src2
이며 대소문자를 구분하지 않습니다. 최대 n
개 확인 중
각 utf8 문자열의 바이트 수입니다.
void * utf8ncat ( void * dst , const void * src , size_t n );
utf8 문자열 src
utf8 문자열 dst
에 추가합니다.
최대 n+1
바이트 쓰기. 잘못된 utf8을 생성할 수 있음
n
이 utf8 코드 포인트의 중간에 속하는 경우 문자열입니다.
int utf8ncmp ( const void * src1 , const void * src2 , size_t n );
src1 < src2
인 경우 0보다 작은 값, 0, 0보다 큰 값을 반환합니다.
src1 == src2
, src1 > src2
각각. 최대 n
개 확인 중
각 utf8 문자열의 바이트 수입니다.
void * utf8ncpy ( void * dst , const void * src , size_t n );
utf8 문자열 src
dst
에 할당된 메모리에 복사합니다.
최대 n
바이트를 복사합니다. n
utf8 코드 포인트의 중간에 떨어지거나 dst
널 종결자를 위한 공간이 충분하지 않은 경우 utf8 유효성을 유지하기 위해 최종 문자열이 짧아집니다.
void * utf8pbrk ( const void * str , const void * accept );
utf8 문자열 str
에서 임의 바이트의 첫 번째 항목을 찾습니다.
utf8 string accept
, 일치하는 항목이 없으면 0입니다.
void * utf8rchr ( const void * src , utf8_int32_t chr );
utf8 문자열 src
에서 utf8 코드포인트 chr
의 마지막 일치 항목을 찾습니다.
size_t utf8size ( const void * str );
utf8 문자열 str
의 바이트 수,
null 종료 바이트를 포함합니다.
size_t utf8size_lazy ( const void * str );
null 종료 바이트가 제외 된다는 점을 제외하면 utf8size
와 유사합니다.
size_t utf8nsize_lazy ( const void * str , size_t n );
utf8size
와 유사하지만 최대 n
바이트의 src
만 조회되고 null 종료 바이트는 제외 됩니다.
size_t utf8spn ( const void * src , const void * accept );
완전히 구성된 utf8 문자열 src
의 utf8 코드 포인트 수
utf8 문자열의 utf8 코드 포인트 중 하나는 accept
.
void * utf8str ( const void * haystack , const void * needle );
utf8 문자열 needle
더미에서 utf8 문자열 haystack
의 위치입니다.
void * utf8casestr ( const void * haystack , const void * needle );
utf8 문자열 건초 haystack
needle
위치는 대소문자를 구분하지 않습니다.
void * utf8valid ( const void * str );
성공하면 0을 반환하고, 실패하면 잘못된 utf8 코드 포인트의 위치를 반환합니다.
void * utf8nvalid ( const void * str , size_t n );
utf8valid
와 유사하지만 최대 n
바이트의 src
만 검색된다는 점이 다릅니다.
int utf8makevalid ( void * str , utf8_int32_t replacement );
성공하면 0을 반환합니다. 유효하지 않은 시퀀스를 1바이트 replacement
코드 포인트로 대체하여 str
을 유효하게 만듭니다.
void * utf8codepoint ( const void * str , utf8_int32_t * out_codepoint );
out_codepoint를 str
의 현재 utf8 코드 포인트로 설정하고 str
의 현재 코드 포인트 다음의 다음 utf8 코드 포인트의 주소를 반환합니다.
void * utf8rcodepoint ( const void * str , utf8_int32_t * out_codepoint );
out_codepoint를 str
의 현재 utf8 코드 포인트로 설정하고 str
의 현재 utf8 코드 포인트 이전의 이전 utf8 코드 포인트 주소를 반환합니다.
size_t utf8codepointsize ( utf8_int32_t chr );
주어진 코드 포인트의 크기를 바이트 단위로 반환합니다.
void * utf8catcodepoint ( void * utf8_restrict str , utf8_int32_t chr , size_t n );
주어진 문자열에 코드포인트를 쓰고, 작성된 코드포인트 다음 위치에 주소를 반환합니다. 버퍼에 남은 바이트 수를 n에 전달합니다. 코드 포인트를 위한 공간이 충분하지 않으면 이 함수는 null을 반환합니다.
int utf8islower ( utf8_int32_t chr );
주어진 문자가 소문자이면 1을 반환하고 그렇지 않으면 0을 반환합니다.
int utf8isupper ( utf8_int32_t chr );
주어진 문자가 대문자이면 1을 반환하고 그렇지 않으면 0을 반환합니다.
void utf8lwr ( void * utf8_restrict str );
주어진 문자열을 모두 소문자 코드 포인트로 변환합니다.
void utf8upr ( void * utf8_restrict str );
주어진 문자열을 모두 대문자 코드 포인트로 변환합니다.
utf8_int32_t utf8lwrcodepoint ( utf8_int32_t cp );
가능하면 코드포인트를 소문자로 만드세요.
utf8_int32_t utf8uprcodepoint ( utf8_int32_t cp );
가능하면 코드포인트를 대문자로 만드세요.
제공된 다양한 함수는 대소문자를 구분하지 않는 비교를 수행하거나 utf8 문자열을 한 대소문자에서 다른 대소문자로 변환합니다. 유니코드의 광대함과 저자가 대소문자가 의미하는 바에 대한 라틴 코드 포인트 이상의 이해가 부족하다는 점을 감안할 때 대소문자를 구분하지 않는 코드에서 확인되는 유일한 범주는 다음과 같습니다.
이는 공개 도메인으로 출시된 무료이며 제한이 없는 소프트웨어입니다.
누구든지 이 소프트웨어를 소스 코드 형식이나 컴파일된 바이너리로, 상업적 또는 비상업적 목적과 어떤 수단으로든 자유롭게 복사, 수정, 게시, 사용, 컴파일, 판매 또는 배포할 수 있습니다.
저작권법을 인정하는 관할권에서 이 소프트웨어의 작성자는 소프트웨어에 대한 모든 저작권 이익을 공개 도메인에 바칩니다. 우리는 대중의 이익을 위해 그리고 우리의 상속자와 후계자들에게 손해를 끼치기 위해 이러한 헌신을 합니다. 우리는 이러한 헌신이 저작권법에 따라 이 소프트웨어에 대한 현재 및 미래의 모든 권리를 영구적으로 포기하는 명백한 행위가 되도록 의도합니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 작성자는 소프트웨어나 소프트웨어의 사용 또는 기타 거래로 인해 발생하거나 이와 관련하여 발생하는 계약, 불법 행위 또는 기타 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다.
자세한 내용은 http://unlicense.org/를 참조하세요.