QT에서 한글 데이터 가지고 작업하기가 힘드네요.

paeksj98의 이미지

제가 첨하는 부분이라 잘이해가 되지 않네요.
혹시 아시는분은좀 도움좀 부탁드립니다.
타겟 보드에서는 한글로 디스플레이 되는데 이걸 시리얼로 보내서 윈도쪽에서 프린트를 하면 ????로 출력이 되네요.

QString tmp= "한글입니다"

QEucKrCodec* codec = new QEucKrCodec();
//codec = QTextCodec::codecForName("eucKR");
QString hangul = codec->toUnicode(tmp, tmp.length);

unsigned char cSendData[];
memcpy(cSendData, hangul, size);

send(cSendData); ==> 윈도쪽으로 시리얼로 날림.

/*
Font = QFont("arialbd",14,QFont::Normal);
LineFont = QFont("arialbd",16,QFont::Normal);
BigFont = QFont("arialbd",24,QFont::Normal);
codec = QTextCodec::codecForName("ISO8859-15");
*/ ==>타켓보드에서 한글이 보이도록 처리한 부분

타켓보드에서는 정상처리로 보이는데 왜이럴까요.
item = new QListViewItem(listView, m_pDtcMsg[row].Code, m_pDtcMsg[row].Message, m_pDtcMsg[row].Status);
이렇게 하면 정상적으로 디스플레이 됩니다.
하지만 이데이터를 그대로 보내거나 위와같이 가공해서 보내면 결과는 ????출력되요.

한글관련되서 이런처리는 처음이라 어떻게 접근해야할지 모르겠네요.

작업버전은 qt3.3입니다.

누가 힌트좀 주세요....^^

pogusm의 이미지

한글은 trUtf8("한글") 로 감싸면 되지 않을까요?

QString tmp(trUtf8("한글입니다"));

라스코니의 이미지

윈도우쪽의 언어 설정이 제대로 되어 있다는 가정하에서,

unsigned char cSendData[];
memcpy(cSendData, hangul, size);

이 좀 의심스럽네요.

unsigned char cSendData[];
sprintf(cSendData, "%s", hangul.c_str());

저라면 이렇게 쓸 것 같네요.

klyx의 이미지

보통은 이렇게 하지 않기 때문에 어디에서 문제가 되고 있는지 모르겠고, 게다가 Qt3은 제가 테스트 해볼수도 없기 때문에 그냥 일반적인 이야기를 적겠습니다.

"한글입니다" 이 날 문자열(raw string)은 해당 소스파일(텍스트파일)의 인코딩을 따라갑니다.
반면에 QString의 생성자가 raw string이 들어올경우에는 이것을 Latin-1문자열로 인식합니다.
해결법은 (i18n을 위해서) 한글을 쓰지 않는 것이 가장 좋은 방법이고, 다음으로 추천하는 것은 소스파일을 utf-8로 하여 QString::fromUtf8을 이용하거나, 직접 unicode 번호를 적어서 QString::fromUtf8에 넘기는 것입니다.
그외에도 기본 인코딩을 변경하는 등의 방법이 있지만 그다지 추천하고 싶지 않네요.

그리고 보낼때 QString을 memcpy로 복사하고 있는데, QString뿐만아니라 모든 클래스의 객체를 memcpy로 복사하는 것은 아무런 의미없는 행동일 가능성이 높습니다.
QString의 멤버 함수중에 ucs2라는 내부 유니코드에 대한 배열을 반환하는 함수가 있으니 이함수를 이용하세요.

paeksj98의 이미지

여러가지 테스트를 해보다가 약간에 해결책은 찾은것 같습니다.

QString a = "이건한글";

qDebug(a);// 출력 : 이건한글 시리얼 통해서 윈도쪽도 정상출력

QString hangul = codec->toUnicode(a, a.length());

이렇게 하고서
qDebug(a); // 출력 : ???? 시리얼 통해서 윈도우쪽도 ????? 출력

시리얼로 보낼데이터는 유니코드로 변경하면안되네요.

toUbicode로 변경한건 타겟 보드에서 출력할려고 한작업이고

이제 유니코드로 되어있는걸 유니코드 전상태로 변경하면 될것 같은데 유니코드 이전으로 변경하는 방법이 있나요..??

있으면좀 알려주세요.....또 구글링 해야겠네요....

익명 사용자의 이미지

toUnicode()라고 해서 변환하면 ANSI로 출력되는게 아니겠네요. 따라서 기본 설정일 경우는 깨져보이겠죠.

cmd.exe 콘솔이라면 chcp 65001을 실행한 후에 실행시켜보시길

paeksj98의 이미지

유니코드로 변경해서 화면에 디스플레이를 하고
이걸다시 fromUnicode를 이용해서 다시 변경하고 시리얼로 보내면 정상적으로 보내져서 프린트가 되네요..
엄한걸 가지고 삽질했네요.

모든 답변주신분을 많은 도움이 되었습니다.
감사합니다.

댓글 달기

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