        import qrcode,zxingcpp
        from PIL import Image
        ssid='Lab;Guest';password='p;a\\ss';check('SSID和密码原字符保留',output.get('ssid')==ssid and output.get('password')==password and output.get('security')=='WPA' and output.get('hidden') is False)
        def escape(text):return ''.join('\\'+c if c in '\\;,:"' else c for c in text)
        payload='WIFI:T:'+str(output.get('security',''))+';S:'+escape(str(output.get('ssid','')))+';P:'+escape(str(output.get('password','')))+';H:'+str(output.get('hidden',False)).lower()+';;'
        qrcode.make(payload,error_correction=qrcode.constants.ERROR_CORRECT_M,box_size=10,border=4).save(artifact('wifi-qr.png'));decoded=zxingcpp.read_barcode(Image.open(folder/'wifi-qr.png'));check('独立ZXing引擎能解码真实PNG',decoded is not None and decoded.text==payload)
        fields={};token='';key=None;escaped=False
        for ch in payload[len('WIFI:'):]:
            if escaped:token+=ch;escaped=False
            elif ch=='\\':escaped=True
            elif ch==':' and key is None:key=token;token=''
            elif ch==';':
                if key is not None:fields[key]=token
                token='';key=None
            else:token+=ch
        check('反转义后网络名密码完全一致',fields.get('S')==ssid and fields.get('P')==password);result={'payload':payload,'decoded':decoded.text if decoded else None,'roundtrip':fields,'syntheticCredentialsOnly':True,'connectedToNetwork':False};dump(artifact('qr-roundtrip.json'),result)
