1# ArkTS子系统Changelog
2
3## cl.arkts.1 util.TextEncoder模块utf-16le和utf-16be编码数据行为变更
4
5**访问级别**
6
7公开接口
8
9**变更原因**
10
11TextEncoder编码器在编码格式设置为utf-16le和utf-16be时,获得的编码数据相反。
12
13utf-16le为小端编码格式,编码出数据应该符合小端编码数据,但是实际表现为大端编码数据。
14
15utf-16be为大端编码格式,编码出数据应该符合大端编码数据,但是实际表现为小端编码数据。
16
17这两种编码格式所编码出的数据行为与标准定义不符合,需要修复此问题。
18
19**变更影响**
20
21该变更为不兼容性变更。
22
23变更前:
24
25utf-16le为小端编码格式,编码出数据应该符合小端编码数据,但是实际表现为大端编码数据。
26
27utf-16be为大端编码格式,编码出数据应该符合大端编码数据,但是实际表现为小端编码数据。
28
29变更后:
30
31utf-16le为小端编码格式,实际表现为小端编码数据。
32
33utf-16be为大端编码格式,实际表现为大端编码数据。
34
35**起始API Level**
36
37API 9
38
39**变更发生版本**
40
41从OpenHarmony 5.0.0.42 版本开始。
42
43**变更的接口/组件**
44
45util.TextEncoder模块的接口:
46
47encodeInto(input?: string): Uint8Array;
48
49encodeIntoUint8Array(input: string, dest: Uint8Array): EncodeIntoUint8ArrayInfo;
50
51**适配指导**
52
53变更描述: 修复TextEncoder编码器在编码格式设置为utf-16le和utf-16be时获取编码数据与定义不相符的BUG。
54
55encodeInto接口的表现:
56
57```ts
58import { util } from '@kit.ArkTS';
59
60let encoderUtf16Le = new util.TextEncoder("utf-16le");
61let encoderUtf16Be = new util.TextEncoder("utf-16be");
62
63// 变更前:
64// let u16_le = encoderUtf16Le.encodeInto('abcdefg'); // u16_le: 0,97,0,98,0,99,0,100,0,101,0,102,0,103
65// let u16_be = encoderUtf16Be.encodeInto('abcdefg'); // u16_be: 97,0,98,0,99,0,100,0,101,0,102,0,103,0
66
67
68// 变更后:
69let u16_le = encoderUtf16Le.encodeInto('abcdefg'); // u16_le: 97,0,98,0,99,0,100,0,101,0,102,0,103,0
70let u16_be = encoderUtf16Be.encodeInto('abcdefg'); // u16_be: 0,97,0,98,0,99,0,100,0,101,0,102,0,103
71```
72
73encodeIntoUint8Array接口的表现:
74
75```ts
76import { util } from '@kit.ArkTS';
77
78let encoderUtf16Le = new util.TextEncoder("utf-16le");
79let encoderUtf16Be = new util.TextEncoder("utf-16be");
80
81// 变更前:
82// let dest_le = new Uint8Array(14);
83// let dest_be = new Uint8Array(14);
84// let res_le = encoderUtf16Le.encodeIntoUint8Array('abcdefg', dest_le); // dest_le: 0,97,0,98,0,99,0,100,0,101,0,102,0,103
85// let res_be = encoderUtf16Be.encodeIntoUint8Array('abcdefg', dest_be); // dest_be: 97,0,98,0,99,0,100,0,101,0,102,0,103,0
86
87// 变更后:
88let dest_le = new Uint8Array(14);
89let dest_be = new Uint8Array(14);
90let res_le = encoderUtf16Le.encodeIntoUint8Array('abcdefg', dest_le); // dest_le: 97,0,98,0,99,0,100,0,101,0,102,0,103,0
91let res_be = encoderUtf16Be.encodeIntoUint8Array('abcdefg', dest_be); // dest_be: 0,97,0,98,0,99,0,100,0,101,0,102,0,103
92```
93