문제

지난 주에 나는 다음과 같은 일을 했습니다. 로그 같은 친구와 함께 C++로 게임을 해보세요.대부분 언어도 배웁니다.

나는 다음을 사용하고 있습니다 :

  • pd저주
  • 윈도우 7
  • 비주얼 스튜디오 C++

출력하려면 wchar_t콘솔에서 내가 원하는 곳에 위치하세요.\u263B(☻)와 같은 일부 유니코드 문자를 출력하는 데 성공했지만 \u2638(☸)과 같은 다른 문자는 물음표(?)로 끝나게 됩니다.

출력에 사용하는 관련 코드는 다음과 같습니다.

// Container of room information

struct RoomInfo
{
    wchar_t * layout;
    int width;
    int height;
};

// The following function builds RoomInfo 

RoomInfo Room::examine(IActor * examinor)
{
    RoomInfo ri;
    ri.width = this->width;
    ri.height = this->height;
    ri.layout = new wchar_t[height * width];
    for(unsigned int y = 0; y < height; y++)
    {
        for(unsigned int x = 0; x < width; x++)
        {
            ri.layout[y*width + x] = L'\u263B'; // works
            //ri.layout[y*width + x] = L'\u2638'; // will not work
        }
    }
}

// The following function outputs RoomInfo

void CursesConsole::printRoom(RoomInfo room)
{
    int w = room.width;
    int h = room.height;

    WINDOW * mapw = newwin(h, w, 1, 0);
    for(int y = 0; y < h; y++)
    {
        wmove(mapw, y, 0);
        for(int x = 0; x < w; x++)
        {
            int c = y*w + x;
            waddch(mapw, room.layout[c]);
        }
    }

    wrefresh(mapw);
    delwin(mapw);
}

물론 지루한 ANSI 문자를 사용할 수도 있습니다.하지만 완전한 유니코드 문자 세트를 갖고 놀 수 있다면 정말 멋질 것입니다.

그것을 요 ​​약하기: 유니코드 문자가 올바르게 출력되는지 어떻게 확인합니까?


편집하다:

좋아, 인코딩이 올바르게 작동하고 있다는 것을 알았습니다.문제는 터미널을 유니코드가 더 풍부한 글꼴로 전환하도록 강제해야 합니다..이를 수행하는 크로스 플랫폼 방법이 있습니까?이 작업을 수행하는 특정 방법이 있습니까?

도움이 되었습니까?

해결책

문제는 터미널을 강제로 유니코드가 풍부한 글꼴로 전환해야 한다는 것입니다.이를 수행하는 크로스 플랫폼 방법이 있습니까?이 작업을 수행하는 특정 방법이 있습니까?

나는 이것을 찾아보았지만 이를 수행하기 위한 Windows API 호출을 찾을 수 없었습니다(물론 내가 찾지 못했다는 의미일 수도 있음).나는 그것을 수행하는 크로스 플랫폼 방법을 찾을 것이라고 기대하지 않습니다.

제가 생각할 수 있는 가장 좋은 해결책은 특별히 구성된 콘솔을 사용하여 콘솔을 실행하는 것입니다. 쉘 링크 (.LNK) 파일입니다.당신이 읽으면 파일 형식 문서, 을 클릭하면 글꼴을 지정할 수 있다는 것을 알 수 있습니다.

하지만 문제는 거기서 끝나지 않습니다.Windows의 서부 로케일 설치는 다음을 제공합니다. 루시다 콘솔, 그러나 해당 글꼴은 문자소의 제한된 하위 집합만 제공합니다.일본어 Windows PC의 콘솔에서는 일본어 텍스트를 출력/입력할 수 있다고 가정합니다.일본어 Windows에서 작동하는지 확인하려면 일본어 Windows에서 사용할 수 있는 것이 무엇인지 확인해야 합니다.

Linux(적어도 Ubuntu)는 UTF-8을 사용하고 광범위한 문자소 지원이 포함된 글꼴을 제공함으로써 훨씬 더 나은 지원을 제공하는 것 같습니다.나는 이야기가 무엇인지 확인하기 위해 다른 배포판을 확인하지 않았으며 터미널에서 글꼴이 어떻게 해결되는지(X, Gnome 등) 확인하지 않았습니다.

다른 팁

원칙적으로 모든 유니코드 문자는 콘솔에서 지원됩니다.물음표가 표시된다는 사실은 아마도 해당 문자에 대한 글꼴 지원과 관련이 있을 것입니다.콘솔 글꼴을 유니코드를 매우 잘 지원하는 글꼴로 바꿔보세요.

코드 페이지를 올바르게 설정해야 합니다.여기에 대한 꽤 좋은 기사가 있습니다. 링크

꽤 큰 스위치이기는 하지만, 특히 로그라이크 게임을 하고 있다면 대체 콘솔을 사용해 볼 수도 있습니다. libtcod C++ 바인딩을 사용하여 C로 작성된 적당히 인기 있는 라이브러리로, 자신만의 글꼴과 문자를 설정할 수 있는 풀 컬러 콘솔을 제공합니다.이는 Windows 콘솔이 제공하는 것에 얽매이는 것보다 훨씬 더 많은 유연성을 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top