Amplify Flutter의 API입니다.Post/put(REST)에서 일본어 난자

Amplify Flutter의 일반 제공이 시작되자 코그니토와 REST API 등을 이용해 앱을 제작했다.
https://aws.amazon.com/jp/blogs/news/amplify-flutter-is-now-generally-available-build-beautiful-cross-platform-apps/
공식 견본에 따르면 일본어는 난장판이 되기 때문에 이에 해당하는 내용을 미리 기록한다.
https://docs.amplify.aws/lib/restapi/getting-started/q/platform/flutter#initialize-amplify-api
https://docs.amplify.aws/lib/restapi/update/q/platform/flutter
  • 변경 전
  • 공식 샘플에 따라 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().convertUint8List로 전환해 주세요.
    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');
    }
    

    참고 자료


    https://qiita.com/takeshi_hirosue/items/ed9ead69e727e0d4fc5e
    https://qiita.com/takyam/items/98d6336f1b2fe912fd56

    좋은 웹페이지 즐겨찾기