😸
Amplify Flutter の API.post / put(REST)で日本語が文字化け
Amplify Flutterの一般提供がはじまったので、CognitoやREST APIなど使って、アプリを作成しています。
公式のサンプル通り記載すると、日本語が文字化けるので、対応をメモしておきます。
- 変更前
公式のサンプル通りに、Uint8List.fromList
で文字列に変換すると、日本語が文字化けしてしまいます。
try {
RestOptions options = RestOptions(
path: '/todo',
body: Uint8List.fromList('{\'name\':\'ほげ\'}'.codeUnits) // <------- 変更箇所 Uint8List.fromList で文字列変換すると、日本語が文字化けします。
);
RestOperation restOperation = Amplify.API.put(
restOptions: options
);
RestResponse response = await restOperation.response;
print('PUT call succeeded');
print(new String.fromCharCodes(response.data));
} on ApiException catch (e) {
print('PUT call failed: $e');
}
- 変更後
リクエストに日本語が含まれている場合は、Utf8Encoder().convert
でUint8List
に変換しましょう。
import 'dart:convert';
...(中略)...
try {
final encoder = const Utf8Encoder(); // <------- 追加
RestOptions options = RestOptions(
path: '/todo',
body: encoder.convert(('{\'name\':\'ほげ\'}') // <------- 変更箇所 Utf8Encoder().convert でbyte配列に変更しましょう。
);
RestOperation restOperation = Amplify.API.put(
restOptions: options
);
RestResponse response = await restOperation.response;
print('PUT call succeeded');
print(new String.fromCharCodes(response.data));
} on ApiException catch (e) {
print('PUT call failed: $e');
}
参考
Discussion