2014-12-23 17 views
0

C++/C#을 확장 ASCII 문자에서 확인 . 는 이러한 게임 콘솔에 그래픽을 생성 및 인쇄에 관해서 그래서 때, 나는 다음을 수행해야한다고 그림 : 1) 메모장과 같은 텍스트 편집기에서 이것 저것 수준을 디자인하고, 2) 확장 ASCII가 포함되어 있기 때문에 이러한 파일을 유니 코드로 인코딩 된 txt 파일로 저장하십시오. 3) 제 게임 프로그램에서이 파일들로부터 그래픽을 읽어 와서 축 어적으로 콘솔에 출력하게하십시오. 이것은 한 가지 문제가 있다는 점을 제외하고는 나에게 훌륭한 계획처럼 보입니다. 내 인생 유니 코드 인코딩으로 TXT 파일에서 읽기 - I 로그 (Rogue)와 그래픽을 특징으로 그 유도체, 같은/제작 80 년대에서 텍스트 기반의 롤 플레잉 게임을 모방에서 최근 관심을 촬영했습니다

, 나는 확장 된 ASCII 문자가 제대로 출력에 프로그램을 얻을 수 없습니다. 일반적으로 프로그램에서 파일의 각 단일 문자를 ASCII 문자 쌍으로 읽는 것으로 보입니다. 예를 들어, 문자 '☺'는 "&;"또는 이와 비슷한 형식으로 출력됩니다.

C에서

++ 및/또는 C#을 어떻게 제대로 프로그램 및 출력 콘솔 창에 그 라인에 유니 코드로 인코딩 TXT 파일에서 확장 ASCII 문자, 라인별로 라인을 읽을 수 있습니까?

(내 말은, "&;"과 같이 손상된 char-pair를 사용하는 변환기 기능을 만들 수 있다고 가정하고, 큰 ASCII 코드로 '☺'와 같은 단일 ASCII 문자로 다시 변환합니다. 'IF-다음 문 또는 일부 영리 추론 수학 공식은,하지만, 나 또한 많이 알고 관심뿐만 아니라 매우 게으른 것이 얼마나 C++/C# 핸들 파일 I/비 ANSI 인코딩 된 TXT 파일과 O, 그들이 경우 실제로 이러한 메커니즘을 구현 한)

+1

"확장 ASCII"는 완전히 모호한 용어이며 피할 가치가있는 용어입니다. 실제로 어떤 인코딩에 대해 이야기하고 있는지 알아내는 것이 좋습니다. –

+0

[아무 것도 없음] (http://stackoverflow.com/questions/1149673/c-unicode-file-io?rq=1) 도움을 받으시겠습니까? 또한 [tag : C#]와 [tag : C++]를 동시에 요구하면 질문이 불필요하게 넓어집니다. –

+0

나는 약간의 연구를했으며 "확장 ASCII"는 IBM 컴퓨터에서 대중화 된 OEM 문자 세트를 말하는 것이라고 생각합니다. – sirsuripu

답변

1

당신이 양쪽 (텍스트 파일을 작성하고 그것을 다시 읽기) 일을 매우 쉽게 제어하기 때문에!

.NET은 기본적으로 UTF-8 인코딩을 사용합니다. StreamWriter()를 사용하여 파일을 작성하는 경우 StreamReader()를 사용하여 파일을 다시 읽을 수 있으며 모든 문자는 변경되지 않은 상태로 왕복 여행에서 살아남습니다. 이제

당신을위한 트릭

: 당신이 있는지 확인 엉 외부 편집기로 이러한 파일을 조작하려면 편집기/쓰기 UTF-8 인코딩을 읽을 수 있습니다. notepad ++를 사용하면됩니다. 나는, 그래서 여기에 매우 C 번호로 아니에요

0

는 C++

#include <stdio.h> 

int main() 
{ 
    FILE * pFile; 
    wchar_t mystring [100]; 

    pFile = fopen ("myfile.txt" , "r"); 
    if (pFile != NULL) 
    { 
    if (fgetws (mystring , 100 , pFile) != NULL) 
     fputws (mystring, stdout); 
    fclose (pFile); 
    } 
    return 0; 
} 

나는 그것이 귀하의 경우하지만 당신의 (안 문제가 더 나은 성능을 제공하기 때문에 C 스타일의 IO 작업이 아닌 C++을 사용하는 것이 좋습니다 샘플입니다 그렇게해야합니다). 따라서 fopen을 사용하여 열린 파일이 필요하며 파일 리소스를 사용한 후에도 을 사용하여 읽으십시오. 파일을 닫는 것을 잊지 마십시오.

또한 콘솔에 인쇄하는 것은 달라야합니다 (와이드 문자를 사용한다고 알려야 함). 따라서 fputws을 사용하십시오.


또한 추가하면, 그 약간 더 나은 성능을 제공해야 데이터를 읽을 (fopen"b" 대신 "r" 사용) 바이너리 읽기 형식을 사용한다, 제안,하지만 당신은 일부 데이터 분석을 구현해야합니다 수 있습니다.또한


당신이 C++ 유형의 솔루션을 찾고 있다면, 당신은 스트림을 사용할 수 있지만 당신이 w를 사용 std::cout 사용 std::wcout 등 대신에, 그래서 대신 std::ifstream std::wifstream의, 당신은 와이드 문자로 작업 지정 필요 접두사.

+0

나는 여전히 같은 문제를 안고있다. 이 코드를 테스트하기 위해 단지 '☺'문자를 포함하는 유니 코드 txt 파일을 만들었고, "■ & :"(BOM을 나타내는 두 문자와 그 뒤의 문자 쌍이 손상된 스마일 문자)를 인쇄합니다. 스트림과도 같은 방식입니다. – sirsuripu