유니코드 문제...

dreampia의 이미지

유니코드 옵션으로 컴파일 한 Visual C++ client와

일반적인 옵션으로 컴파일 한 서버(Solaris) 사이에 데이터를 주고 받는데 있어서 문제가 있어 질문을 합니다.

서버에서

strcpy(username, "việtnam");

와 같이 username이라는 변수에 멀티바이트 문자를 입력해서 보냈습니다.

client에서 메세지박스로 결과물을 출력하면 첨부 문서와 같이 깨집니다.

server에서 보낼때 어떤 변환을 하면 client에서 깨지지 않고 받을 수 있을까요?

서버에서는 gcc 3.3.2를 사용합니다.

wchar_t를 사용해도 안 되더군요.. 제가 사용법을 몰라서인지..

어떤 방법이 있을까요?

File attachments: 
첨부파일 크기
Image icon aa.jpg166.36 KB
송효진의 이미지

윈도 클라이언트 인것 같네요.
보이는것만 깨지는거라면 메세지박스 자체도 MessageBoxW 던가 하는 Wide 전용이 있습니다.
데이터 자체가 깨진다면, 변환함수가 필요할듯 합니다.
영문부분은 무사한것을 보면, 보이는것만 깨지는거라 생각됩니다.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~

chadr의 이미지

보내는쪽의 멀티바이트 문자가 한글이 아닌가봅니다..
그렇다면 받는 쪽에서도 보내는쪽과 같은 코드페이지로 출력을 해야지만 정상적으로 보이게 됩니다.

wchar_t를 이용해서 보낸다고 해도 윈도우의 wchar_t와 솔라리시의 wchar_t의 데이터형 크기가 다를겁니다.
(리눅스는 4바이트이고 윈도우는 2바이트였는데 솔라리스는 어떨지 모르겠네요..)
유니코드를 이용해서 주고 받으실려면 보내는쪽의 유니코드 방식으로 받는쪽에서 변환을 해주셔야 합니다..
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

익명 사용자의 이미지

각각의 단계에서 어떤 인코딩 방식을 이용할 것인지를 명확히 정해야 합니다.
인터넷으로 데이터를 주고 받는 거라면 byte 단위인 UTF-8을 추천하는 바입니다.
UTF-8은 바이트 단위라서 빅/리틀 엔디안 같은 문제는 없습니다.

일단, 서버에서 UTF-8인 유니코드 문자열을 생성합니다.
UTF-8인 문자열을 어떻게 생성하는지에 대해서는 쓰시는 라이브러리와 컴파일러에 따라 다릅니다.
그냥 소스파일의 인코딩이 UTF-8이라고 되는게 아니고, "str"인가 L"str"인가 혹은 컴파일러가 무엇인가와 같은
여러가지 조건에 따라 다르므로 확실하게 확인하시는 것이 좋습니다.

이제 생성한 UTF-8 문자열을 byte 단위로 클라이언트로 전송합니다.

client에서는 넘겨받은 UTF-8 문자열을 윈도우즈에서 사용하는 인코딩으로 변환합니다.
이 과정에서 쓰이는 함수는 MultiByteToWideChar 함수하고 WideCharToMultiByte 입니다.
이 함수들로 넘겨받은 char형 UTF-8 문자열을 wchar_t로, 혹은 그 역으로 변환 가능합니다.
참고로, 코드페이지는 UTF-8이 65001입니다.

이제 변환된 유니코드 문자열을 MessageBoxW 같은 유니코드 지원 W계열 함수로 출력하시면 됩니다.

댓글 달기

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