Unicode文字を対応するASCII文字に変換する方法
質問
問題は次のとおりです。
C#では、レガシーACCESSデータベースから情報を取得しています。 .NETは、データベースのコンテンツ(この問題の場合は文字列)をUnicodeに変換してから、コンテンツを私に渡します。
このUnicode文字列をASCII形式に戻すにはどうすればよいですか?
編集
Unicode char 710は、実際にはMODIFIER LETTER CIRCUMFLEXアクセントです。問題はもう少し正確です:
-> (Extended) ASCII character ê (Extended ASCII 136) was inserted in the database. -> Either Access or the reading component in .NET converted this to U+02C6 U+0065 (MODIFIER LETTER CIRCUMFLEX ACCENT + LATIN SMALL LETTER E) -> I need the (Extended) ASCII character 136 back.
ここに私が試したものがあります(なぜこれが機能しなかったのかわかりました...):
string myInput = Convert.ToString(Convert.ToChar(710));
byte[] asBytes = Encoding.ASCII.GetBytes(myInput);
ただし、これは94ではなく、値63のバイトになります...
これは新しい試みですが、まだ動作しません:
byte[] bytes = Encoding.ASCII.GetBytes("ê");
ソリューション
csgero の両方に感謝します。および bzlm 正しい方向に問題を解決しましたこちら。
解決
さて、詳しく説明しましょう。 csgero と< a href = "https://stackoverflow.com/questions/138449/how-to-convert-a-unicode-character-to-its-extended-ascii-equivalent#138583"> bzlm が右側にある方向。
blzmの返信のために、WikiでWindows-1252ページを検索し、コードページと呼ばれることがわかりました。 コードページのウィキペディアの記事には、次のように記載されています:
これらの正式な標準はありません&#8216; 拡張文字セット&#8217; ; IBMは、EBCDICエンコーディングのバリアントに対して常に行っていたように、単にバリアントをコードページと呼んでいました。
これにより、コードページ437が作成されました。
n ASCII互換コードページ、下位128文字は標準のUS-ASCII値を維持し、上位128文字で異なるページ(または文字セット)を使用できるようになりました。たとえば、北米市場向けに構築されたDOSコンピューターは、コードページ437 を使用しました。フランス語、ドイツ語、および他のいくつかのヨーロッパ言語に必要な文字、およびいくつかのグラフィカルな線画文字。
つまり、コードページ437は「拡張ASCII」と呼んでいたコードページで、&#234;文字136なので、他の文字も検索しましたが、それらは正しいようです。
csgeroにはEncoding.GetEncoding()ヒントが付属していました。このヒントを使用して、問題を解決する次のステートメントを作成しました。
byte[] bytes = Encoding.GetEncoding(437).GetBytes("ê");
他のヒント
ここではデフォルトのASCIIエンコーディング(Encoding.ASCII)を使用できませんが、Encoding.GetEncoding(...)を使用して適切なコードページでエンコーディングを作成する必要があります。 ISO 8859-1のスーパーセットであるコードページ1252を使用してみてください。
ASCIIは&#234;を定義しません;番号136は、Windows-1252などの8ビットエンコーディングのサーカムフレックスの番号に由来します。
サーカムフレックス(&#234;)の付いた小さなeが、この場合、Accessデータベースに実際に格納されるはずのものであることを確認できますか?おそらくU + 02C6 U + 0065は変換エラーの結果であり、入力は実際にはeであり、その後にサーカムフレックスが続きますか、まったく別のものです。おそらく、指定したエンコードがコンテンツと一致しないという意味で、Accessデータベースに破損したデータが含まれている可能性があります。その場合、.NETクライアントはデータを誤って解析する可能性があります(間違ったデコーダーを使用)。
データベースからの読み取り中にこのエラーが実際に発生した場合、おそらくいくつかのコードまたは構成設定を貼り付けると役立つ場合があります。
コードページ437 では、文字番号136は曲折アクセント付きのeです。
うーん&nbsp;&#8230;どういう意味かわかりません。キャレット(&#8220; ^&#8221;、CIRCUMFLEX ACCENT)にはASCIIとUnicode(U + 005E)の同じコードがあります。
/ EDIT:くそー、私のせい。 710(U + 02C6)は、実際にはMODIFIER LETTER CIRCUMFLEXアクセントです。残念ながら、この文字はASCIIの一部ではありません。通常のキャレットのように見えるかもしれませんが、異なるキャラクターです。単純な変換はここでは役に立ちません。 Unicodeから変換するときに、.NETが同様の文字のマッピングをサポートするかどうかはわかりません。ただし、調査する価値はあります。
値63は疑問符で、別名「この文字をASCIIで表示することはできません」