1# ArkTS子系统Changelog
2
3## cl.arkts.1 convertXml模块未支持parentKey属性的行为变更
4
5**访问级别**
6
7公开接口
8
9**变更原因**
10
11convertXml模块未实现parentKey属性,生成的object中不具有parentKey属性的值。
12
13**变更影响**
14
15该变更为不兼容性变更。
16
17变更前:
18convertToJSObject接口对xml字符串的入参进行解析时,未支持设置parentKey属性的值。
19
20变更后:
21convertToJSObject接口对xml字符串的入参进行解析时,可以支持正确设置parentKey属性的值。
22
23**起始API Level**
24
25API 9
26
27**变更发生版本**
28
29从OpenHarmony 5.0.1.1 版本开始。
30
31**变更的接口/组件**
32ConvertXML模块下的接口:
33
34convertToJSObject(xml: string, options?: ConvertOptions): Object;
35
36**适配指导**
37
38变更:convertToJSObject接口对xml字符串的入参进行解析时,可以支持正确设置parentKey属性的值。
39
40```ts
41import { convertxml } from '@kit.ArkTS';
42
43let xml =
44  '<?xml version="1.0" encoding="utf-8"?>' +
45    '<note importance="high" logged="true">' +
46    '    <title>Happy</title>' +
47    '    <todo>Work</todo>' +
48    '    <todo>Play</todo>' +
49    '</note>';
50let conv = new convertxml.ConvertXML()
51let options: convertxml.ConvertOptions = {
52  trim: false,
53  declarationKey: "_declaration",
54  instructionKey: "_instruction",
55  attributesKey: "_attributes",
56  textKey: "_text",
57  cdataKey: "_cdata",
58  doctypeKey: "_doctype",
59  commentKey: "_comment",
60  parentKey: "_parent",
61  typeKey: "_type",
62  nameKey: "_name",
63  elementsKey: "_elements"
64}
65let result: ESObject = conv.convertToJSObject(xml, options);
66
67// 变更前:result的值实际为: {"_declaration":{"_attributes":{"version":"1.0","encoding":"utf-8"}},"_elements":[{"_type":"element","_name":"note","_attributes":{"importance":"high","logged":"true"},"_elements":[{"_type":"element","_name":"title","_elements":[{"_type":"text","_text":"Happy"}]},{"_type":"element","_name":"todo","_elements":[{"_type":"text","_text":"Work"}]},{"_type":"element","_name":"todo","_elements":[{"_type":"text","_text":"Play"}]}]}]}
68
69// 变更后:result的值实际为(新增parentKey属性): {"_declaration":{"_attributes":{"version":"1.0","encoding":"utf-8"}},"_elements":[{"_type":"element","_name":"note","_attributes":{"importance":"high","logged":"true"},"_elements":[{"_type":"element","_name":"title","_parent":"note","_elements":[{"_type":"text","_text":"Happy"}]},{"_type":"element","_name":"todo","_parent":"note","_elements":[{"_type":"text","_text":"Work"}]},{"_type":"element","_name":"todo","_parent":"note","_elements":[{"_type":"text","_text":"Play"}]}]}]}
70
71// 对于开发者使用场景来说,不影响开发者使用。
72// 获取title标签的parentKey属性的方法是:result1["_elements"][0]["_elements"][0]._parent
73// 变更前:获取title标签的parentKey属性为:undefined
74// 变更后:获取title标签的parentKey属性为实际值:note
75```
76
77## cl.arkts.2 util.TextEncoder模块utf-16le和utf-16be编码数据行为变更
78
79**访问级别**
80
81公开接口
82
83**变更原因**
84
85TextEncoder编码器在编码格式设置为utf-16le和utf-16be时,获得的编码数据相反。
86utf-16le为小端编码格式,编码出数据应该符合小端编码数据,但是实际表现为大端编码数据。
87utf-16be为大端编码格式,编码出数据应该符合大端编码数据,但是实际表现为小端编码数据。
88这两种编码格式所编码出的数据行为与标准定义不符合,需要修复此问题。
89
90**变更影响**
91
92该变更为不兼容性变更。
93
94变更前:
95utf-16le为小端编码格式,编码出数据应该符合小端编码数据,但是实际表现为大端编码数据。
96utf-16be为大端编码格式,编码出数据应该符合大端编码数据,但是实际表现为小端编码数据。
97
98变更后:
99utf-16le为小端编码格式,实际表现为小端编码数据。
100utf-16be为大端编码格式,实际表现为大端编码数据。
101
102**起始API Level**
103
104API 9
105
106**变更发生版本**
107
108从OpenHarmony 5.0.1.1 版本开始。
109
110**变更的接口/组件**
111util.TextEncoder模块的接口:
112
113encodeInto(input?: string): Uint8Array;
114encodeIntoUint8Array(input: string, dest: Uint8Array): EncodeIntoUint8ArrayInfo;
115
116**适配指导**
117
118变更描述: 修复TextEncoder编码器在编码格式设置为utf-16le和utf-16be时获取编码数据与定义不相符的BUG。
119
120encodeInto接口的表现:
121
122```ts
123import { util } from '@kit.ArkTS';
124
125let encoderUtf16Le = new util.TextEncoder("utf-16le");
126let encoderUtf16Be = new util.TextEncoder("utf-16be");
127
128// 变更前:
129// let u8_le = encoderUtf16Le.encodeInto('abcdefg'); // u8_le: 0,97,0,98,0,99,0,100,0,101,0,102,0,103
130// let u8_be = encoderUtf16Be.encodeInto('abcdefg'); // u8_be: 97,0,98,0,99,0,100,0,101,0,102,0,103,0
131
132
133// 变更后:
134let u8_le = encoderUtf16Le.encodeInto('abcdefg'); // u8_le: 97,0,98,0,99,0,100,0,101,0,102,0,103,0
135let u8_be = encoderUtf16Be.encodeInto('abcdefg'); // u8_be: 0,97,0,98,0,99,0,100,0,101,0,102,0,103
136```
137
138encodeIntoUint8Array接口的表现:
139
140```ts
141import { util } from '@kit.ArkTS';
142
143let encoderUtf16Le = new util.TextEncoder("utf-16le");
144let encoderUtf16Be = new util.TextEncoder("utf-16be");
145
146// 变更前:
147// let dest_le = new Uint8Array(14);
148// let dest_be = new Uint8Array(14);
149// let res_le = encoderUtf16Le.encodeIntoUint8Array('abcdefg', dest_le); // dest_le: 0,97,0,98,0,99,0,100,0,101,0,102,0,103
150// let res_be = encoderUtf16Be.encodeIntoUint8Array('abcdefg', dest_be); // dest_be: 97,0,98,0,99,0,100,0,101,0,102,0,103,0
151
152// 变更后:
153let dest_le = new Uint8Array(14);
154let dest_be = new Uint8Array(14);
155let res_le = encoderUtf16Le.encodeIntoUint8Array('abcdefg', dest_le); // dest_le: 97,0,98,0,99,0,100,0,101,0,102,0,103,0
156let res_be = encoderUtf16Be.encodeIntoUint8Array('abcdefg', dest_be); // dest_be: 0,97,0,98,0,99,0,100,0,101,0,102,0,103
157```
158
159## cl.arkui.3 通用属性backgroundEffect在modifier中radius参数单位修改
160
161**访问级别**
162
163公开接口
164
165**变更原因**
166
167 直接使用backgroundEffect时对应的模糊参数radius单位为vp。通过modifier或者CAPI使用时,单位为px。现将单位同一为vp。
168
169**变更影响**
170
171该变更为不兼容变更。
172
173变更前:backgroundEffect通过modifier使用时单位为px。<br/>
174![addComponentContent_before](figures/backgroundEffect_before.png)
175
176变更后:backgroundEffect通过modifier使用时单位为vp。<br/>
177![addComponentContent_after](figures//backgroundEffect_after.png)
178
179
180
181**起始API Level**
182
183API 12
184
185**变更发生版本**
186
187从OpenHarmony 5.0.1.1 版本开始。
188
189**变更的接口/组件**
190
191backgroundEffect
192
193**适配指导**
194
195在modifier中使用px2vp方法把radius参数转换为vp。
196
197```ts
198
199import { CommonModifier } from '@kit.ArkUI';
200
201class ColumnModifier extends CommonModifier {
202  public radius: number = 0;
203  applyNormalAttribute(instance: CommonAttribute): void {
204    instance.backgroundEffect({ radius: this.radius })
205  }
206}
207
208@Entry
209@Component
210struct Index {
211  @State testSize: number = 200;
212  @State modifier:ColumnModifier = new ColumnModifier();
213  onPageShow(): void {
214    // 变更前
215    // this.modifier.radius = 10;
216    // 变更后适配
217    this.modifier.radius = px2vp(10);
218  }
219  build() {
220    Column() {
221      Stack() {
222        Image($r('app.media.test')).width(this.testSize).height(this.testSize)
223        Column().width(this.testSize).height(this.testSize).attributeModifier(this.modifier)
224      }.width('100%')
225    }
226  }
227}
228```
229