/
utf16.dart
78 lines (60 loc) · 1.68 KB
/
utf16.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import 'dart:convert';
import 'dart:core';
import 'package:utf/utf.dart' as utf;
abstract class UTF16 extends Encoding {
List<int> get bom;
static const le = [0xff, 0xfe];
static const be = [0xfe, 0xff];
@override
Converter<List<int>, String> get decoder;
@override
Converter<String, List<int>> get encoder;
@override
String get name; // => 'utf16';
}
class UTF16LE extends UTF16 {
@override
List<int> get bom => UTF16.le;
@override
Converter<List<int>, String> get decoder => _UTF16LEDecoder();
@override
Converter<String, List<int>> get encoder => _UTF16LEEnoder();
@override
String get name => 'utf16le';
}
class _UTF16LEDecoder extends Converter<List<int>, String> {
@override
String convert(List<int> input) {
final decoder = utf.Utf16leBytesToCodeUnitsDecoder(input);
return String.fromCharCodes(decoder.decodeRest());
}
}
class _UTF16LEEnoder extends Converter<String, List<int>> {
@override
List<int> convert(String input) {
return utf.encodeUtf16le(input, true);
}
}
class UTF16BE extends UTF16 {
@override
List<int> get bom => UTF16.be;
@override
Converter<List<int>, String> get decoder => _UTF16BEDecoder();
@override
Converter<String, List<int>> get encoder => _UTF16BEEnoder();
@override
String get name => 'utf16be';
}
class _UTF16BEDecoder extends Converter<List<int>, String> {
@override
String convert(List<int> input) {
final decoder = utf.Utf16beBytesToCodeUnitsDecoder(input);
return String.fromCharCodes(decoder.decodeRest());
}
}
class _UTF16BEEnoder extends Converter<String, List<int>> {
@override
List<int> convert(String input) {
return utf.encodeUtf16be(input, true);
}
}