3

課題で助けが必要です。プレーン テキスト ファイルを ASCII で処理し、各コードの文字数 (a の数、b の数など) を返す必要があります。現在、ほぼ完全に機能しています。

ファイルに拡張 ASCII 文字がある場合、3fh サービス割り込みを使用すると、それらがうまく読み取れないという問題が発生しました。

たとえば、ファイルに é (ASCII コード 130) がある場合、それは ß (ASCII コード 225) を読み取ります。割り込みの使い方が間違っているのではないかと思いますが、どうしたらいいのかわからないので、ここで少し助けていただければ幸いです。デバッグも役に立ちません。割り込みはエラーなしで適切に実行され、バッファに間違った値が返されるだけだからです。

これは、ファイルを読み取るために使用している正確なコードです。以前の割り込みからのハンドルを持っています。

      xor ax,ax
      lea dx, buffer        
      mov ah,3fh            
      mov bx,handle         
      mov cx,4096           
      int 21h               

ありがとう!

編集

問題は見つかりましたが、解決方法がわかりません。この文字は 225 として読み取られ、é ではなく á であることが判明しました。á のコードは、私が見つけたすべての ASCII テーブルによると 160 である必要があります...しかし、Unicode では 225 です...メモ帳に ASCII ではなく ANSI として保存するように具体的に指示しているので、これは奇妙です...

4

1 に答える 1

4

コードページを混乱させています。

MS-DOS はコード ページ 437 を使用します。ここで、é はコード 130 です。ただし、ANSI モードのメモ帳はコード ページ 1252を使用します。ここで、é はコード 233 です。

ASCII は 127 までしか定義されていないため、130 または 160 の ASCII チャートなどはありません。拡張 ASCII は標準化されていないため、さまざまな人がさまざまな方法で拡張しています。特に、MS-DOS と Windows は、実質的に異なる拡張 ASCII テーブルである異なるコード ページを使用します。

MS-DOS を使用してファイルを操作する場合は、コード ページ 437 を使用します。Windows を使用してファイルを操作する場合は、コード ページ 1252 を使用します (または、Unicode を使用することをお勧めします)。

しかし、英語とフランス語の両方で同じように解釈できる本を書くことができないのと同じように、ファイルを MS-DOS と Windows の両方で同じように解釈することはできません。

于 2012-09-08T14:08:31.177 に答える