diff --git a/lib/src/server/handler.dart b/lib/src/server/handler.dart index 038d969..0d27f7a 100644 --- a/lib/src/server/handler.dart +++ b/lib/src/server/handler.dart @@ -293,7 +293,8 @@ class ServerHandler_ extends ServiceCall { _customTrailers = null; outgoingTrailersMap['grpc-status'] = status.toString(); if (message != null) { - outgoingTrailersMap['grpc-message'] = message; + outgoingTrailersMap['grpc-message'] = + Uri.encodeFull(message).replaceAll("%20", " "); } final outgoingTrailers =
[]; diff --git a/test/server_test.dart b/test/server_test.dart index a28698c..c9fd0eb 100644 --- a/test/server_test.dart +++ b/test/server_test.dart @@ -167,6 +167,20 @@ void main() { await harness.fromServer.done; }); + test('Server returns encoded error for unary call', () async { + Future methodHandler(ServiceCall call, Future request) async { + throw GrpcError.unknown("エラー"); + } + + harness + ..service.unaryHandler = methodHandler + ..expectErrorResponse(StatusCode.unknown, '%E3%82%A8%E3%83%A9%E3%83%BC') + ..sendRequestHeader('/Test/Unary') + ..sendData(dummyValue) + ..toServer.close(); + await harness.fromServer.done; + }); + test('Server returns error if multiple headers are received for unary call', () async { harness