OS 독립적 인 파일 관리자에서 SDL_ttf를 사용하여 텍스트를 그립니다. Windows에서는 모든 것이 잘 작동하지만 Linux에서는 SDL_ttf의 UTF8 함수를 사용해야합니다. 파일 이름이 UTF8로 인코딩 될 수 있기 때문입니다.Utf8 Linux 파일 이름 및 C
잘 작동하지만 "Ää"와 같은 C 문자열 (파일 이름 아님)이 있으면 잘못 표시됩니다. gcc가 내 문자열을 UTF8로 인코딩하도록 지시 할 방법이 있습니까?
OS 독립적 인 파일 관리자에서 SDL_ttf를 사용하여 텍스트를 그립니다. Windows에서는 모든 것이 잘 작동하지만 Linux에서는 SDL_ttf의 UTF8 함수를 사용해야합니다. 파일 이름이 UTF8로 인코딩 될 수 있기 때문입니다.Utf8 Linux 파일 이름 및 C
잘 작동하지만 "Ää"와 같은 C 문자열 (파일 이름 아님)이 있으면 잘못 표시됩니다. gcc가 내 문자열을 UTF8로 인코딩하도록 지시 할 방법이 있습니까?
gcc는 소스 코드와 문자열 리터럴을 기본적으로 UTF-8로 해석해야합니다. 또한 -fexec - 캐릭터 세트를
C는 유니 코드 문자열 리터럴 구문의 일종이 있어야합니다. "유니 코드 프로그래밍 C"에 대한 인터넷 검색을 시작해야하는데, 좋은 것으로 보이는 두 개의 자습서는 developerworks과 cprogramming.com에있는 자습서입니다.
특정 경우에 대한 일반적인 접근 방법은 와이드 문자열 리터럴 L"Ää"
을 사용한 다음이를 wcstrtombs()
으로 UTF-8로 변환하는 것입니다.
답변 해 주셔서 감사합니다. 이전에 넓은 문자열로 작업 한 적은 없었습니다. L "Ää"로 넓은 문자열을 만드는 방법에 대한 작은 예제를 제공해 주시겠습니까? – Radu
'L "무엇이든"은 이미 "와이드 문자열", 즉 wchar_t의 배열이어야합니다. 그러나 와이드 문자열은 출력에 적합한 UTF-8 문자열이 아닙니다. 그러나 UTF-8이 필요한 리터럴을 출력하는 것이 필요하다면 @ teambob의 대답으로 충분할 것입니다. 넓은 문자열은 코드에서 어떻게 든 조작해야하는 경우에만 필요합니다. – millimoose
글쎄, .o 파일을 보았을 때 gcc에있는 "Ää"문자열이 각 문자에 대한 8 진수로 표시되어 UTF8 루틴이 제대로 표시 할 수 없다는 사실에 놀라지 않습니다. 나는 그 문자들을 어떤 웹 페이지에서 복사하여 얻었지만 리눅스에서 키보드로 써 넣으면 적절한 UTF8 인코딩이 문제가되지 않는다고 생각한다. – Radu
UTF-8 문자열 리터럴의 경우 C 컴파일러에서 특별한 것이 필요하지 않습니다. 사용하는 API에서 API에 대한 적절한 지원은 또 다른 문제이지만 적용되는 것으로 보입니다.
해야 할 일은 파일을 편집하거나 저장할 때 비 ASCII 문자가 다른 인코딩으로 변환되지 않도록 원본 파일이 실제로 UTF-8로 저장되도록해야합니다.
컴파일러는 8 비트 문자 및 구문 상 중요한 문자에 대한 일반적인 ASCII 값을 가정하면 특정 UTF-8 지원이 필요하지 않습니다. 즉, 거의 확실하게 문제가 아닙니다.
답변 해 주셔서 감사합니다. 문제는 문자가 UTF8이 아닌 ASCII (1 옥텟)로 끝나는 것입니다. -fexec-charset 옵션을 시도했지만 : cc1 : error : 인식 할 수없는 명령 행 옵션 "-fexec-charset"이 있습니다. – Radu