터키어 단어 목록이 있습니다. 나는 그들의 길이를 비교할 필요가있다. 그러나 일부 터키 문자가 아닌 ASCII 있기 때문에, 나는 그들을 정확하게 비교할 수 없습니다. 비 ASCII 터키 문자는 2 바이트를 보유합니다. 예를 들어비 ASCII (터키어) 문자를 Linux 용 C에서 1 바이트로 압축하는 방법은 무엇입니까?
: 그는 그것을 확장에 특별한 터키어 문자를 채운다 고 말했다
system("chcp 1254");
:
#include <stdio.h>
#include <string.h>
int main()
{
char s1[] = "ab";
char s2[] = "çş";
printf("%d\n", strlen(s1)); // it prints 2
printf("%d\n", strlen(s2)); // it prints 4
return 0;
}
내 친구는 아래의 코드 줄에 Windows에서 그렇게하는 것이 가능했다 ASCII 표. 그러나 리눅스에서는 작동하지 않습니다.
Linux에서이를 수행 할 수있는 방법이 있습니까?
모두 사용중인 인코딩에 따라 다릅니다. 문자열에서 인코딩 된 코드 포인트 수를 결정하는 UTF-8 (Linux의 표준)을 사용하면 복잡하지 않습니다. [here] (https://stackoverflow.com/a/44998716/214671)는 기본 사항입니다 (C++이지만 문제의 핵심은 충분히 명확해야합니다). –
터키 문자가 차지하는 바이트 수에 따라 터키어 문자 인코딩에 따라 다릅니다. 이상적으로는 이미 UTF-8 인코딩을 사용하고있을 것입니다. ** variable ** length! 반면 cp1254는 8 비트 (1 바이트) 문자 세트이며 UTF-8과 호환되지 않습니다. (그리고 "확장 된"ASCII와 같은 것은 없습니다). –
utf-16으로 승격하고 NFC 형식으로 정규화 한 다음 2 바이트 문자를 계산합니다. 대부분의 알파벳에 충분합니다. – Dragonthoughts