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