유니코드에 대한 초보적인 질문입니다.

hsnks100의 이미지

유니코드는 전세계 문자를 표준적으로 표현하기 위한 장치로 알고 있습니다.

그래서 문자를 담는 크기가 1바이트가 아니고 2바이트 이상이죠.

그런데 유니코드 관련작업을 하는데 몇가지 의문이 있어서 질문드립니다.

int main()
{
//setlocale(LC_ALL, "Korean");
TCHAR one = TEXT('가');
_tprintf(TEXT("%c"), one);
return 0;
}

왜 저기에 있는 주석을 지우면 이상한 문자로 표현이 될까요? 분명 유니코드인데 말이죠.

한글 쓸때는 Korean 다른 문자를 쓸땐 또 다른 로케일을 설정해야하는건가요?

그렇다면 일어+아랍어+한글이 동시에 쓰인 텍스트 파일을 읽을때는 어떻게해야하는건가요?

locale 한글로 설정했는데 아랍어가 들어가있으면?

제대로 알지를 못하니 질문도 정확히 못하는거 같습니다. 꼭좀 알려주세요.
(6월 30일날 군대가는데 쓸데없는게 궁금해지네요. -_-);

요약. 왜 유니코드에서 로케일을 설정해야하는가?
유니코드에서 로케일을 설정해야하면 다국어파일은 어떻게 읽어야하는가?

Prentice의 이미지

LC_ALL의 형식은 보통 ko_KR.UTF-8 등이 되지 않나 싶습니다.

ko_KR.UTF-8이든 fr_FR.UTF-8이든간에 같은 인코딩이면 유니코드 캐릭터셋은 문제 없습니다.

정태영의 이미지

소스 코드가 euc-kr 로 저장되었는지 utf-8 로 저장되었는지 모르겠네요.

그리고 좀 이상한게 TCHAR one = TEXT('가'); 이부분인데요. c 에서 '' 로 쌓여있으면 1바이트 글자의 ascii 값을 의미하는데요. 저렇게 하면 어떤 값이 들어가게 될지 궁금하군요.

setlocale 은 런타임에 이루어지고 TEXT('가') 값은 컴파일 타임에 정해질 것 같은데 말이죠.

--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

hsnks100의 이미지

'' 로 싸여있다고 해서 1바이트를 뜻하는건가요? 아니지 않나요?

----------------------------------------------------
알디 입니다.
http://hsnks100.tistory.com

----------------------------------------------------
개인 블로그: https://kangssu.com

neocoin의 이미지

잘못 작성된 코드에 대해서 정답을 맞추기는 힘들것 같습니다.

TEXT macro가 받는 형은 http://msdn.microsoft.com/en-us/library/dd374074(VS.85).aspx

LPTSTR 입니다. '가' 는 char 형이므로 여기에서 부터 데이터가 어떻게 동작할 지 예측하기는 힘들듯하네요.


코드상으로 출력하려는 환경은 Windows cmd 같습니다.

cmd에서 요즘에는 다국어를 표현할 수 있는지 모르겠습니다. 기본 쉘에서는 못하는 걸로 기억하고 있습니다. 로케일 관련은 출력 전에 해당 프로그램 출력 양식을 맞춰주는 작업을 하는걸 unicode 개념과 섞어서 말씀하시는 거 같습니다.

만약 cmd가 utf-8을 지원한다면 utf-8 로케일로 맞춰서 unicode에서 지원하는 대부분의 문자를 출력할 수 있을 듯하네요.

더 검색해 보니

//setlocale(LC_ALL, "Korean"); 에서 setlocale 이게 설명인데 여기에서 locale 의 정의란 다음 과 같이 지역 코드와 codepage 라고 정의되어 있네요.

코드상 Korea 의 지역 설정만 되어 있는데, 아마 CRT가 해당 프로그램의 출력시 코드 페이지를 지역 코드만 보고 code page값이 null이니 cp949, euc-kr 로 맞추어서 한글이 보이게 출력되지 않나 추측해 봅니다.

mac 이라 직접 실험을 못해보는게 약간 아쉽네요. ;;

winner의 이미지

Macro를 C 함수표기법으로 설명하는데 좀 이상한 것 같습니다.
그리고 macro 함수는 return이 있다고 봐야 할 것 같은데 void 반환형으로 설명하는 것도 이상하고요.

neocoin의 이미지

void 부분이 이상해서 소스를 보고 싶은데, 환경이 mac이라 header를 볼수가 없네요. 애초에 볼수 있는 소스인지도 애매하구요.

다른 분께서 구원을 주세요. ~

winner의 이미지

아마 winnt.h 에 정의되어 있는 것 같은데

#ifdef UNICODE
#define TEXT(x) (L##x)
#else
#define TEXT(x) (x)
#endif

이 정도쯤 될 겁니다.

아마도 문제는 cmd가 Unicode 출력을 제대로 지원해주지 못해서가 맞을 것 같네요.(저도 잘 모름...)

-------------------------------------------------------------------------------------

실제로 보니까 괄호는 없군요. 그냥 L##quote에 quote로 되어 있네요.

http://kaistizen.net/EE/index.php/weblog/comments/unicode_hangul_to_stdout/
관련해서 가장 많이 삽질한 분이신 듯... ^_^

hsnks100의 이미지

C++ 은 왜케 유니코드 하나 쓸려고 해도 이런 삽질을 해야 깨달을 수 있는걸까요?

솔직히 자세하게 제어하는것도 좋지만 너무 과하다는 생각이 듭니다.

관련 메소드가 너무 많아요!!

----------------------------------------------------
알디 입니다.
http://hsnks100.tistory.com

----------------------------------------------------
개인 블로그: https://kangssu.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.