Can't use custom encoding
- Dominant language
- Dart
- Stars
- 1.1k
- Forks
- 419
- Avg merge
- 4d 14h
- Merged PRs (30d)
- 8
Description
I need to send post request with `cp1251` encoding
I've extended `Encoding` class with following code
```dart
import 'dart:convert';
class Cp1251 extends Encoding {
@override
Converter, String> get decoder => Cp1251Decoder();
@override
Converter> get encoder => Cp1251Encoder();
@override
String get name => "windows-1251";
}
class Cp1251Encoder extends Converter> {
@override
List convert(String input) {
final result = List();
for (var i = 0; i < input.length; i++) {
final code = input.codeUnitAt(i);
if (code < 0x80)
result.add(code);
else {
final cpCode = _MAP[code];
if (cpCode != null)
result.add(code);
}
}
return result;
}
}
class Cp1251Decoder extends Converter, String> {
@override
String convert(List input) {
var result = "";
final mapKeys = _MAP.keys.toList(growable: false);
for (var i = 0; i < input.length; i++) {
var code = input[i];
if (code < 0x80)
result += String.fromCharCode(code);
else if (code <= 0xff) {
code -= 0x80;
result += String.fromCharCode(mapKeys[code]);
}
}
return result;
}
}
```
`_MAP` is just chars map for this encoding
But using it throws an error
```
Unhandled exception:
FormatException: Unsupported encoding "windows-1251".
#0 requiredEncodingForCharset (package:http/src/utils.dart:56:3)
#1 Request.encoding (package:http/src/request.dart:51:12)
#2 Request.bodyFields= (package:http/src/request.dart:128:46)
#3 BaseClient._sendUnstreamed (package:http/src/base_client.dart:165:17)
#4 BaseClient.post (package:http/src/base_client.dart:56:5)
#5 post. (package:http/http.dart:70:34)
#6 _withClient (package:http/http.dart:167:20)
#7 post (package:http/http.dart:70:3)
#8 main (file:///Users/this/IdeaProjects/untitled3/src/main.dart:47:23)
#9 _startIsolate. (dart:isolate/runtime/libisolate_patch.dart:300:19)
#10 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)
```
I've tried to replace encoding name with `"ascii"`, but it throws as well
```
Unhandled exception:
Invalid argument (string): Contains invalid characters.: "ОАЭ от 490$"
#0 _UnicodeSubsetEncoder.convert (dart:convert/ascii.dart:86:9)
#1 AsciiCodec.encode (dart:convert/ascii.dart:41:46)
#2 _Uri._uriEncode (dart:core/runtime/liburi_patch.dart:62:26)
#3 Uri.encodeQueryComponent (dart:core/uri.dart:1098:17)
#4 mapToQuery. (package:http/src/utils.dart:19:22)
#5 CastMap.forEach. (dart:_internal/cast.dart:286:8)
#6 __InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin.forEach (dart:collection/runtime/libcompact_hash.dart:367:8)
#7 CastMap.forEach (dart:_internal/cast.dart:285:13)
```
How can I use non-default encoding?
Contributor guide
Assessment
This issue has not been assessed yet.