質問

問題は次のとおりです。

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で表示することはできません」

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top