Foxpro(DOSベース)プログラムからエクスポートされたテキストファイルがありますが、このテキストには英語以外の文字(アラビア語[右から左])が含まれており、エクスポートされた文字列は「¤“îگüَن」のようになります。
それらを元の値に戻す方法はありますか?
Foxpro(DOSベース)プログラムからエクスポートされたテキストファイルがありますが、このテキストには英語以外の文字(アラビア語[右から左])が含まれており、エクスポートされた文字列は「¤“îگüَن」のようになります。
それらを元の値に戻す方法はありますか?
適切なコードページでデータを読み取る必要があります。
public static string ReadFile(string path, int codepage)
{
return Encoding.GetEncoding(codepage)
.GetString(File.ReadAllBytes(path));
}
正しいコードページIDで関数を呼び出します。MS-DOSアラビア語の場合は「708」である必要があります。完全なリストについては、ウィキペディアで開始できます。
string content = ReadFile(@"c:\test.txt", 708);
サポートされていないエンコーディングから変換するためのルックアップテーブルを使用したソリューション(マッピングは、127を超える文字にのみ必要です):
public static string ReadFile(string path, byte[] translationTable, int codepage)
{
byte[] content = File.ReadAllBytes(path);
for (int i=0; i < content.Length; ++i)
{
byte value = content[i];
if (value > 127)
content[i] = translationTable[value - 128];
}
return Encoding.GetEncoding(codepage)
.GetString(content);
}
変換テーブルの例:
インデックスオリジナル(IS)翻訳済み(1256) ..。 13141194 ..。