質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

5393閲覧

Dartで取得したhttpの文字コード変換がうまくいかない

Nicola

総合スコア21

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2020/06/02 12:51

編集2020/06/03 11:34

Fulutter・Dart初心者です。

dartでdioとshift_jisパッケージを使用してhttpを取得しています。
取得対象のページは、Shift_JISのページです。

取得直後の日本語部分 > <title>�N���l�R���}�g�̉ו����₢���킹�V�X�e��</title>
これはブラウザでエンコーディングをUTF8に指定した時と同じになります。
よって、UTF8として取得していると判断しています。

それを、 shift_jisパッケージにてShift_JISのデコードをすると、下記のようになります。
デコード後の日本語部分 > <title>�N���l�R���}�g� ユ����「���ケ�V�X�e��</title>

上記のようにうまく文字コードの変換をすることができません。
他にもcharset_converterパッケージを使ってみましたが日本語に変換できません。
どこか手順が間違っているのでしょうか?

yaml

1dependencies: 2 dio: ^3.0.8 3 shift_jis: ^0.3.0

dart

1import 'package:dio/dio.dart'; 2import 'package:shift_jis/shift_jis.dart'; 3import 'dart:typed_data'; 4 5class http_client { 6 7 var dio = Dio(); 8 9 http_client(); 10 11 Future<String> getHttp() async { 12 13 try { 14 Response response; 15 url = "https://toi.kuronekoyamato.co.jp/cgi-bin/tneko"; 16 response = await dio.get(url); 17 //デコード 18 String responseBody = response.data; 19 List<int> list = responseBody.codeUnits; 20 Uint8List bytes = Uint8List.fromList(list); 21 responseBody = await shiftJisDecode(bytes); 22 return responseBody; 23 } catch (e) { 24 print(e); 25 return e; 26 } 27 } 28} 29 30Future<Uint8List> shiftJisEncode(String text) async { 31 final encoded = await ShiftJis.encode(text); 32 return encoded; 33} 34 35Future<String> shiftJisDecode(Uint8List encoded) async { 36 final decoded = await ShiftJis.decode(encoded); 37 return decoded; 38}

検索しながら二日悩みましたが解決できません。
どんなことでもいいので助けていただけないでしょうか。よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

httpの取得形式を変えることによって解決しました。

これを

dart

1 response = await dio.get(url); 2 //デコード 3 String responseBody = response.data 4 List<int> list = responseBody.codeUnits; 5 Uint8List bytes = Uint8List.fromList(list);

下記のように変更しました。

dart

1 Response<List<int>> bytes = await Dio().get<List<int>>(url, 2 options: Options(responseType: ResponseType.bytes), // // set responseType to `bytes` 3 );

投稿2020/06/04 00:17

編集2020/06/04 01:03
Nicola

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問