[解決済み] WebClient.DownloadString はエンコーディングの問題で文字化けしますが、ブラウザは問題ありません。
2023-04-20 05:39:26
質問
次のようなコードです。
var text = (new WebClient()).DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20"));
の結果は、変数
text
という文字列が格納されます。
"$κ$-ミンコフスキー空間、スカラー場、ローレンツ不変の問題"
しかし、Firefox でその URL にアクセスすると、次のようになります。
κ$-ミンコスキー空間、スカラー場、ローレンツ不変の問題
というのは、実は正しいのです。また
var data = (new WebClient()).DownloadData("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20");
var text = System.Text.UTF8Encoding.Default.GetString(data);
を追加しましたが、これも同じ問題が発生しました。
どこに原因があるのかよくわかりません。フィードが UTF8 エンコードされているというのは嘘で、ブラウザはそれを理解できるほど賢いが
WebClient
? フィードは適切に UTF8 エンコードされているが
WebClient
は他の何らかの方法で失敗しているのでしょうか?これを軽減するためにはどうしたらよいでしょうか?
どのように解決するのですか?
嘘ではありません。DownloadStringを呼び出す前に、まずウェブクライアントのエンコーディングを設定する必要があります。
using(WebClient webClient = new WebClient())
{
webClient.Encoding = Encoding.UTF8;
string s = webClient.DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20");
}
なぜ代替案が機能しないかというと、使い方が正しくないからです。そうであるべきです。
System.Text.Encoding.UTF8.GetString()
関連
-
[解決済み】WCFとは何か、何ができるのか?
-
[解決済み】コンパイラーエラーメッセージ。コンパイラはエラーコード -532462766 で失敗しました。
-
[解決済み] msiexec を使用せずにコマンドラインから MSI ファイルをアンインストールする
-
[解決済み] C++/CLIにおけるキャレット('^')の意味は?
-
[解決済み] ファイルまたはアセンブリ 'System.Data.SQLite' をロードできませんでした。
-
[解決済み] VB.NETで線を引く方法
-
[解決済み] CryptographicException「キーセットが存在しない」、ただしWCF経由に限る
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] なぜPythonはデフォルトのエンコーディングがASCIIなのにunicodeの文字を表示するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】WCFとは何か、何ができるのか?
-
[解決済み】コンパイラーエラーメッセージ。コンパイラはエラーコード -532462766 で失敗しました。
-
[解決済み] アセンブリから型を読み込めなかったエラー
-
[解決済み] VB.NETでプログラムパスを取得する?
-
[解決済み] フレームワークとアーキテクチャの違いは何ですか?[クローズド]
-
[解決済み] Microsoft.NETFrameworkとMicrosoft.NETFramework64の違いは何ですか?
-
[解決済み] .Netの配列のLongLengthの目的は何ですか?
-
[解決済み] 24:00:00 を超える値を持つ .Net Timespan を格納するための正しい SQL タイプは何ですか?
-
[解決済み] DockPanelを空きスペースいっぱいに表示させる方法
-
[解決済み] System.Timers.Timer vs System.Threading.Timer