14

問題は次のとおりです。

C# では、従来の ACCESS データベースから情報を取得しています。.NET は、コンテンツを私に渡す前に、データベースのコンテンツ (この問題の場合は文字列) を Unicode に変換します。

この Unicode 文字列を ASCII 文字列に戻すにはどうすればよいですか?


Edit
Unicode char 710 は実際には MODIFIER LETTER CIRCUMFLEX ACCENT です。もう少し正確な問題は次のとおりです。

-> (拡張) ASCII 文字 ê (拡張 ASCII 136) がデータベースに挿入されました。
 -> Access または .NET の読み取りコンポーネントがこれを U+02C6 U+0065 に変換しました
    (モディファイアレターサーカムフレックスアクセント + ラテン小文字 E)
 -> (拡張) ASCII 文字 136 が必要です。


これが私が試したことです(これが機能しなかった理由がわかりました...):

string myInput = Convert.ToString(Convert.ToChar(710));
byte[] asBytes = Encoding.ASCII.GetBytes(myInput);

しかし、これは 94 にはなりませんが、値が 63 のバイトになります...
これは新しい試行ですが、それでも機能しません:

byte[] bytes = Encoding.ASCII.GetBytes("ê");


解決策正しい方向を示してくれたcsgerobzlm
の 両方に感謝します。ここで問題を解決しました。

4

5 に答える 5

11

では、詳しく説明しましょう。csgerobzlmの両方が正しい方向を指していました。

blzm の返信があったので、wiki で Windows-1252 ページを調べたところ、コードページと呼ばれていることがわかりました。コードページのウィキペディアの記事には、次のように記載されています。

これらの「<a href="http://en.wikipedia.org/wiki/Extended_ASCII" rel="nofollow noreferrer">拡張文字セット」の正式な標準は存在しません。IBM は、EBCDIC エンコーディングのバリアントに対して常に行ってきたように、単にバリアントをコード ページと呼んでいました。

これにより、コードページ 437 にたどり着きました。

n ASCII 互換コード ページ。下位 128 文字は標準の US-ASCII 値を維持し、上位 128 文字で別のページ (または文字セット) を使用できるようにすることができました。たとえば、北米市場向けに構築された DOS コンピューターは、コード ページ 437を使用しました。これには、フランス語、ドイツ語、および他のいくつかのヨーロッパ言語に必要なアクセント付き文字と、グラフィカルな線画文字が含まれていました。

したがって、コードページ 437 は、私が「拡張 ASCII」と呼んでいたコードページであり、文字 136 として ê を持っていたので、他の文字も調べたところ、正しいようです。

csgero には Encoding.GetEncoding() ヒントが付属していました。これを使用して、問題を解決する次のステートメントを作成しました。

byte[] bytes = Encoding.GetEncoding(437).GetBytes("ê");
于 2008-09-26T20:37:17.027 に答える
4

ここではデフォルトの ASCII エンコーディング (Encoding.ASCII) を使用できませんが、Encoding.GetEncoding(...) を使用して適切なコード ページでエンコーディングを作成する必要があります。ISO 8859-1 のスーパーセットであるコード ページ 1252 を使用してみてください。

于 2008-09-26T10:05:18.757 に答える
2

ASCII は ê を定義しません。136 という数字は、Windows-1252 などの 8 ビット エンコーディングのサーカムフレックスの数字に由来します。

この場合、サーカムフレックス (ê) が付いた小さな e が、実際に Access データベースに格納されるはずのものであることを確認できますか? おそらく、U+02C6 U+0065 は変換エラーの結果であり、入力は実際には e の後にサーカムフレックスが続くか、まったく別のものです。おそらく、指定されたエンコーディングがコンテンツと一致しないという意味で、Access データベースに破損したデータが含まれている可能性があります。

データベースからの読み取り中にこのエラーが実際に発生した場合は、コードまたは構成設定を貼り付けると役立つ場合があります。

コード ページ 437では、文字番号 136 はサーカムフレックス付きの e です。

于 2008-09-26T10:06:11.810 に答える
0

うーん…どのキャラクターのことかよくわかりません。キャレット (「^」、CIRCUMFLEX ACCENT) は、ASCII と Unicode で同じコード (U+005E) を持ちます。

/編集: くそー、私のせい。710 (U+02C6) は、実際には MODIFIER LETTER CIRCUMFLEX ACCENT です。残念ながら、この文字は ASCII の一部ではありません。通常のキャレットのように見えるかもしれませんが、別の文字です。ここでは単純な変換は役に立ちません。Unicode からの変換時に、.NET が同様の文字のマッピングをサポートしているかどうかはわかりません。ただし、調査する価値はあります。

于 2008-09-26T09:29:29.823 に答える
0

値 63 は疑問符、別名「この文字を ASCII で表示できません」です。

于 2008-09-26T09:36:04.787 に答える