1# ArkTS子系统Changelog
2
3## cl.arkts.1 StringDecoder中特定场景下解码错误数据行为变更
4
5**访问级别**
6
7公开接口
8
9**变更原因**
10
11StringDecoder对于入参Uint8Array中存在元素0的情况,无法解码出Uint8Array中元素0后数据,在元素0位置截断,导致获取不到完整的解码数据。
12
13**变更影响**
14
15该变更为兼容性变更,属于问题修复。
16
17变更前:
18对于存在元素0的Uint8Array对象进行编码时,数据不完整。对解码出的值进行编码时,无法正常恢复为原始Uint8Array。
19
20变更后:
21对存在元素0的Uint8Array对象,正确进行解码,解码数据完整。
22
23**起始API Level**
24
25API 12
26
27**变更发生版本**
28
29从OpenHarmony 5.0.0.43 版本开始。
30
31**变更的接口/组件**
32
33util.StringDecoder模块下的两个接口:
34
35write(chunk: string | Uint8Array): string;
36
37end(chunk?: string | Uint8Array): string;
38
39**适配指导**
40
41变更描述:Uint8Array中存在元素0的情况,无需适配,属于问题修复。
42
43```ts
44import { util } from '@kit.ArkTS';
45
46let decoder = new util.StringDecoder('utf-8');
47// 0xE4, 0xBD, 0xA0 解码结果:你
48// 0                解码结果:\u0000(不可见字符,占一个长度)
49// 0xE5, 0xA5, 0xBD 解码结果:好
50let input = new Uint8Array([0xE4, 0xBD, 0xA0, 0, 0xE5, 0xA5, 0xBD]);
51const decoded = decoder.write(input);
52const decodedend = decoder.end(input);
53
54// 变更前:
55// console.info("decoded:", decoded);// 你
56// console.info("decoded.length:", decoded.length);// 1
57// console.info("decodedend:", decodedend);// 你
58// console.info("decodedend.length:", decodedend.length);// 1
59
60// 变更后:
61console.info("decoded:", decoded);// 你好
62console.info("decoded.length:", decoded.length);// 3
63console.info("decodedend:", decodedend);// 你好
64console.info("decodedend.length:", decodedend.length);// 3
65```
66
67