2011-09-29 3 views
0

OS 독립적 인 파일 관리자에서 SDL_ttf를 사용하여 텍스트를 그립니다. Windows에서는 모든 것이 잘 작동하지만 Linux에서는 SDL_ttf의 UTF8 함수를 사용해야합니다. 파일 이름이 UTF8로 인코딩 될 수 있기 때문입니다.Utf8 Linux 파일 이름 및 C

잘 작동하지만 "Ää"와 같은 C 문자열 (파일 이름 아님)이 있으면 잘못 표시됩니다. gcc가 내 문자열을 UTF8로 인코딩하도록 지시 할 방법이 있습니까?

답변

1

gcc는 소스 코드와 문자열 리터럴을 기본적으로 UTF-8로 해석해야합니다. 또한 -fexec - 캐릭터 세트를

참조하십시오 : http://gcc.gnu.org/onlinedocs/gcc-4.0.1/cpp/Implementation_002ddefined-behavior.html#Implementation_002ddefined-behavior

+0

답변 해 주셔서 감사합니다. 문제는 문자가 UTF8이 아닌 ASCII (1 옥텟)로 끝나는 것입니다. -fexec-charset 옵션을 시도했지만 : cc1 : error : 인식 할 수없는 명령 행 옵션 "-fexec-charset"이 있습니다. – Radu

1

C는 유니 코드 문자열 리터럴 구문의 일종이 있어야합니다. "유니 코드 프로그래밍 C"에 대한 인터넷 검색을 시작해야하는데, 좋은 것으로 보이는 두 개의 자습서는 developerworkscprogramming.com에있는 자습서입니다.

특정 경우에 대한 일반적인 접근 방법은 와이드 문자열 리터럴 L"Ää"을 사용한 다음이를 wcstrtombs()으로 UTF-8로 변환하는 것입니다.

+0

답변 해 주셔서 감사합니다. 이전에 넓은 문자열로 작업 한 적은 없었습니다. L "Ää"로 넓은 문자열을 만드는 방법에 대한 작은 예제를 제공해 주시겠습니까? – Radu

+0

'L "무엇이든"은 이미 "와이드 문자열", 즉 wchar_t의 배열이어야합니다. 그러나 와이드 문자열은 출력에 적합한 UTF-8 문자열이 아닙니다. 그러나 UTF-8이 필요한 리터럴을 출력하는 것이 필요하다면 @ teambob의 대답으로 충분할 것입니다. 넓은 문자열은 코드에서 어떻게 든 조작해야하는 경우에만 필요합니다. – millimoose

+0

글쎄, .o 파일을 보았을 때 gcc에있는 "Ää"문자열이 각 문자에 대한 8 진수로 표시되어 UTF8 루틴이 제대로 표시 할 수 없다는 사실에 놀라지 않습니다. 나는 그 문자들을 어떤 웹 페이지에서 복사하여 얻었지만 리눅스에서 키보드로 써 넣으면 적절한 UTF8 인코딩이 문제가되지 않는다고 생각한다. – Radu

4

UTF-8 문자열 리터럴의 경우 C 컴파일러에서 특별한 것이 필요하지 않습니다. 사용하는 API에서 API에 대한 적절한 지원은 또 다른 문제이지만 적용되는 것으로 보입니다.

해야 할 일은 파일을 편집하거나 저장할 때 비 ASCII 문자가 다른 인코딩으로 변환되지 않도록 원본 파일이 실제로 UTF-8로 저장되도록해야합니다.

컴파일러는 8 비트 문자 및 구문 상 중요한 문자에 대한 일반적인 ASCII 값을 가정하면 특정 UTF-8 지원이 필요하지 않습니다. 즉, 거의 확실하게 문제가 아닙니다.

+2

이것이 옳다. 문제는 소스 코드 편집기 일 가능성이있다 (ISO-8859-1로 설정되어 있는가?). – caf

+0

예, 문제를 일으키는 소스 편집기입니다. Windows에서 Textpad를 사용하고 Linux에서 일부 기본 텍스트 편집기를 사용했지만 Linux에서 기본적으로 UTF8로 변환하기를 바랬습니다. – Radu