0

私は最近、80 年代のテキスト ベースの RPG を作成/エミュレートすることに興味を持っています。たとえば、Rogue やその派生物など、拡張 ASCII 文字から作成されたグラフィックを特徴としています。したがって、これらのゲームのグラフィックを作成してコンソールに出力する場合は、次のことを行う必要があると考えています。1) メモ帳などのテキスト エディターでレベルなどをデザインします。2) これらのファイルには拡張 ASCII が含まれているため、これらのファイルを Unicode でエンコードされた txt ファイルとして保存します。3) ゲーム プログラムにこれらのファイルからグラフィックを読み取らせ、コンソールにそのまま出力します。これは良い計画のように思えますが、問題が 1 つあります。

私の人生では、プログラムに拡張 ASCII 文字を正しく出力させることはできません。一般的に起こることは、プログラムがファイルから各単一文字を ASCII 文字のペアとして読み取るように見えることです。たとえば、文字「☺」は「&;」などとして出力されます。

C++ や C# で、Unicode でエンコードされた txt ファイルから拡張 ASCII 文字を 1 行ずつプログラムに適切に読み取り、それらの行をコンソール ウィンドウに出力するにはどうすればよいですか?

(つまり、"&;" のような破損した文字ペアを取り、それを '☺' のような単一の ASCII 文字に変換する変換関数を作ることができると思います。ステートメントまたはいくつかの巧妙に推測された数式ですが、私はかなり怠け者であるだけでなく、C++/C# が ANSI でエンコードされていない txt ファイルを使用してファイル I/O を処理する方法を知りたいと思っています (実際にそのようなメカニズムがある場合)。実装!)

4

2 に答える 2

1

両側 (テキスト ファイルの書き込みと読み取り) を制御するため、作業は非常に簡単です。

.net はデフォルトで UTF-8 エンコーディングを使用します。StreamWriter() を使用してファイルを書き込む場合、StreamReader() を使用してファイルを読み戻すことができ、すべての文字は変更されずにラウンドトリップに残ります。

ここでの秘訣は次のとおりです。このようなファイルを外部エディターで操作する場合は、エディターが UTF-8 エンコーディングを読み書きできることを確認してください。notepad ++を使用してください。

于 2014-12-23T08:21:38.060 に答える
0

私は C# にはあまり興味がないので、ここに 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を使用してファイルを開き、 fgetwsを使用して読み取る必要があります。また、ファイル リソースを使用した後は、ファイルを閉じることを忘れないでください。

また、コンソールへの出力も異なる必要があるため (つまり、ワイド文字を使用することを伝える必要があります)、fputwsを使用します。


また、バイナリ読み取り形式 ( in の代わりに使用) を使用してデータを読み取ることをお勧めします。これ"b"により、パフォーマンスがわずかに向上するはずですが、データ解析を実装する必要がある場合があります。"r"fopen


また、C++ タイプのソリューションを探している場合は、ストリームを使用できますが、ワイド文字を使用していることを指定する必要std::ifstream std::wifstreamstd::coutありstd::wcoutますw

于 2014-12-23T08:30:04.817 に答える