teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

検証コード追記

2021/01/24 07:18

投稿

hiroshihorie
hiroshihorie

スコア197

answer CHANGED
@@ -1,1 +1,26 @@
1
- 詳細は確認していないのですが。そのページのサーバのレスポンスヘッダを見るとContent-Type: text/html; charset=euc-jpとなっています。UTF-8ではない可能性があります。
1
+ 詳細は確認していないのですが。そのページのサーバのレスポンスヘッダを見るとContent-Type: text/html; charset=euc-jpとなっています。UTF-8ではない可能性があります。
2
+
3
+ **追記**
4
+ 質問者のコメントの通りUserAgentを指定するとUTF-8で返す仕様のサーバみたいですね。
5
+ 下記のコードで検証してみましたがしっかりタイトルを取得できました。
6
+
7
+ ```dart
8
+ final userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_1_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Mobile/15E148 Safari/604.1';
9
+ final client = http.Client();
10
+ try {
11
+ var response = await client.get(
12
+ Uri.parse("http://news4vip.livedoor.biz/archives/52385788.html"),
13
+ headers: {
14
+ 'User-Agent': userAgent,
15
+ },
16
+ );
17
+ print("response.headers: ${response.headers['content-type']}");
18
+ final decoded = await CharsetConverter.decode('UTF-8', response.bodyBytes);
19
+ final document = dom.Document.html(decoded);
20
+ print(document.querySelector('title')?.text);
21
+ } catch (error) {
22
+ print('error: $error');
23
+ } finally {
24
+ client.close();
25
+ }
26
+ ```