gcc는 유니 코드를 어떻게 사용 할 수 있나요??

onemind555의 이미지

vc 같은 경우는 TEXT("문자")
이런 식으로 유니코드를 넣어 컴파일 할 수 있는데,.
gcc에서도 저런 매크로가 존재 하는가요??

eungkyu의 이미지

onemind555 wrote:
vc 같은 경우는 TEXT("문자")
이런 식으로 유니코드를 넣어 컴파일 할 수 있는데,.
gcc에서도 저런 매크로가 존재 하는가요??

아무래도 C가 기계에 가까운 언어이다보니까 유니코드 쓰는 것이 쉽지는 않죠..

http://www.tldp.org/HOWTO/Unicode-HOWTO-6.html#ss6.1

여기를 참고하시면 좋을겁니다.

byung82의 이미지

TEXT는 매크로 입니다 ^^;

보시면

#ifdef _UNICODE
#define TEXT(quote) L##quote
#else
#define TEXT(quote) ##quote
#endif

이렇게 되어 있습니다 ^^;

L문자열 이면 유니코드 문자입니다.

그럼

onemind555의 이미지

질문의 요지가 빗나간듯..

gcc 에서요...

wchar_t buf = " ";

저런 사용이 가능 한가요? 바로 사용이 불가능 하다면 적절한 방법은 어떤 것이 있는지요??

-----------^^ ^^ ^^ ^^ ^^ ----------
..........................................................

byung82의 이미지

이렇게 사용하시면 됩니다.

wchar_t *test = L"TEST";

이런씩입니다..

꼭 L을 붙여야 합니다 ^^:

onemind555의 이미지

..................

-----------^^ ^^ ^^ ^^ ^^ ----------
..........................................................

purewell의 이미지

#include <wchar.h>

#define _T(x) L##x

...


wchar_t* pStr=_T("푸하하하하");

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

cinsk의 이미지

string constant에 'L'을 붙였다고 unicode (UTF-32)라고 할 수 없습니다.

L을 붙이는 것은 string constant나 character constant가 wide character로 이루어졌다는 것을 뜻하지만, wide character가 바로 unicode (UTF-32)라고 할 수는 없습니다. (wide character는 implementation defined manner로 정의되어 있으므로)

대부분 implementation은 character code를 ASCII로 사용하고, 또 ASCII 문자는 (implementation defined manner로) 다시 32-bit로 변환되어 저장되며, UTF-32에서 ASCII charset은 단순히 0을 앞에 붙여 32-bit로 만든 것에 불과하니, 결국은 대부분 컴파일러에서 ASCII 문자열에 'L'을 붙이면 UTF-32로 저장한다고 말할 수는 있을 것 같습니다.

만약 non-ASCII로 encoding된 문자열의 경우에는 잘 모르겠군요. 가장 확실한 방법은 library가 제공하는 multi-byte/wide-character conversion function들을 쓰거나 아니면 iconv library를 쓰는 것이겠죠.

참고로 glibc에서는 wide character internal encoding이 UTF-32라고 못 박고 있어서 제 경우에는 (한글이나 non-ASCII 영역을 쓸 경우가 거의 없기 때문에) 제 라이브러리가 glibc용이라는 것을 못 박고 L prefix를 붙여서 UTF-32로 쓰고 있습니다.

완벽히 portable한 code라면 문자열 data만 따로 file로 저장한 다음, 이를 필요에 따라 encoding을 바꿔 쓰거나 하는 것이 좋을 것 같군요.

전웅의 이미지

참고로, wide character 라고 하여 반드시 "wide" 할 필요는 없습니다.
wide/mb character 에 대한 지원 의지 (혹은 필요성) 가 전혀 없는
implementation 의 경우, 간단히 wide character 를 single-byte character
로 둘 수도 있습니다.

한가지 재미있는 사실은, 만약 wchar_t 가 char 형인 환경이라면 (C++ 와는
달리) C 에서 (non-wide) character constant 가 int 형이기에

sizeof(L'a') == 1 && sizeof(L'a') <= sizeof('a')

가 참이 되어야 한다는 사실입니다. 따라서, wchar_t 를 char 형으로 두면
서 wide character 지원을 하지 않기에 간단히 character constant 앞의
L 을 무시하는 C 컴파일러는 주의하지 않으면 자신도 모르게 non-
conforming implementation 이 되어 버립니다.

이러한 이유로 wide character 를 사실상 지원하지 않는 implementation 도
wchar_t 를 최소한 short int 이상으로 정의하고, L 을 인식하여 처리하고
있습니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.