5

ANSIでエンコードされたファイルがあります。ただし、その中にアラビア文字が表示されます。このテキストファイルは何らかのプログラムによって生成されましたが(私は情報がありません)、アラビア文字を表示するための何らかの内部エンコーディング(私が言うかもしれないし、可能であれば)があるようです。

そんなことありますか?そうでない場合、ANSIファイルはどのようにアラビア文字を表示できますか?

*可能であればJavaコードで説明してください


エディション01

Notepad ++で開くと、ページエンコーディングがANSIであることが示されます。この写真をチェックしてください:

http://www.4shared.com/file/221862075/e8705951/text-Windows.html


エディション02

次の場所からファイルを確認できます。

http://www.4shared.com/file/221853641/3fa1af8c/data.html

4

6 に答える 6

4

ANSIでエンコードされていることをどのように知っていますか?UTF-8のようなマルチバイトエンコーディングでない場合は、次のようなアラビア語のコードページを使用してエンコードされていると思います:Windows-1256

16進エディタでファイルを見て、アラビア語の文字が何番であるかを調べ、その方法で、ファイルが作成されたエンコーディング/コードページを見つけようとすることができます。

于 2010-02-14T12:11:41.713 に答える
4

簡単な答え:おそらく、テキストファイルは「ANSI」でエンコードされていませんが、utf-8です。

長い答え

まず、「ANSI」(Windowsの場合)という用語は、固定エンコーディングを意味するものではありません。その意味はあなたの言語設定に依存します。たとえば、西ヨーロッパと米国では、通常、Windows-1252ISO / IEC 8859-1のバリアント、latin-1とも呼ばれます)、日本ではSHift JIS、アラビア諸国ではISO/になります。 IEC_8859-6

アラビア語以外のバージョンのWindowsを使用していて、言語設定を変更しておらず、メモ帳で開いたときにファイルにアラビア文字が表示されている場合は、これらのANSIエンコーディングのいずれにも含まれていません。代わりに、おそらくUnicodeです。

「UNICODE」という意味ではないことに注意してください。これは、Windowsでは通常UTF-16LEを意味します。UTF-8の場合も あります。どちらも、現在Unicodeで定義されている100.000以上の文字すべてをエンコードできるエンコードですが、方法は異なります。どちらも可変長エンコーディングです。つまり、すべての文字が同じビット数を使用してエンコードされるわけではありません。

UTF-8では、各文字は1〜4バイトとしてエンコードされます。エンコーディングは、ASCII文字が1バイトでエンコードされるように選択されています。

UTF-16では、各文字は2つの4バイトとしてエンコードされます。このエンコーディングは、Unicodeの文字数が64K未満のときに考案されたものであるため、1つの16ビットワードですべての文字をエンコードできます。その後、Unicodeが64Kの制限を超えて拡張する必要があることが明らかになったとき、0xD800-0xDFFFの範囲の単語のペアを使用して最初の64K(マイナス0x800)文字以外の文字を表すスキームが発明されました。

ファイルに実際に何が含まれているかを確認するには、16進エディターでファイルを開きます。

  • 最初の2バイトがFFFEの場合、UTF-16LE(リトルエンディアン)である可能性があります。
  • 最初の2バイトがFEFFの場合、UTF-16BE(ビッグエンディアン、Windowsではほとんどありません)である可能性があります。
  • 最初の3バイトがEFBBBFの場合、UTF-8である可能性があります
  • 00バイトがたくさん表示される場合は、UTF-16(または、00バイトのペアが表示される場合はUTF-32)である可能性があります。
  • アラビア文字が1バイトを占める場合、ISO-8859-6である可能性があります(たとえば、شはD5になります)。
  • アラビア文字が複数のバイトを占める場合は、UTF-8である可能性があります(たとえば、شはD8 B4になります)。
于 2010-02-14T12:11:59.653 に答える
4

そんなことありますか?

いいえ。

そうでない場合、ANSIファイルはどのようにアラビア文字を表示できますか?

これは、Windows-ANSIでエンコードされたファイルではありません。より可能性が高いのは、可変幅エンコーディング、おそらくUTF-8を使用することです。UTF-8の多くの一般的な文字位置は、US-ASCIIの位置と同等です(実際、そのように設計されています)。 Windows-ANSI。

編集:この混乱についてマイクロソフトに感謝しなければなりません。「ANSI」は、エンコーディングに関しては明確に指定されていません。通常、これは、コードページ1252(「Windows-1252」)を使用したWindowsのデフォルトエンコーディングを表すことを意味します。これは、ラテン語から派生した「西洋」のアルファベットに対応します。

ただし、他の国では、Windowsで使用されるデフォルトのエンコーディング(古いWindowsバージョンでは…現在、デフォルトはUTF-8)はWindows-1252ではなく、別のエンコーディングであり、「ANSI」とも呼ばれます。この場合、コードページ1256。

于 2010-02-14T12:12:22.587 に答える
3

FirefoxとOperaの両方でファイルを開いてみました。両方のブラウザで正しく表示されるようにするには、文字エンコードをアラビア語のWindows-1256に設定する必要があったため、ファイルのエンコードはおそらくそれである可能性があります。

注:私はもともとこれをコメントとして投稿しましたが、回答を求められました。

于 2010-02-14T12:40:06.843 に答える
1

ANSI文字エンコードでは、217文字を使用でき、アラビア文字は含まれていません。おそらくファイルは別のエンコーディングを使用していると思います。

編集内容を確認すると、表示されている内容がANSI文字セットの機能を明らかに超えているため、Notepad++に問題があるようです。

于 2010-02-14T12:14:00.230 に答える
1

最初にファイルをダウンロードし、vimを使用してそのエンコーディングをチェックしようとしましたが、それがわからないようで、2番目のマシンではlatin1、notepad ++で起こったことと似ている可能性があると言われました(一般的な答えを与えました)。
だから私はそうしましたfile data.txt、そして出力はこれでした:

data.txt: ISO-8859 text, with CRLF line terminators

お役に立てれば。

編集
ブラウザを使用すると、この答えが正しくないことがわかりました。

ISO-8859-4およびISO-8859-13は、エラーなしでテキストを表示できましたが、文字はアラビア語では表示されませんでした。

于 2010-02-14T12:41:26.127 に答える