Dart与Java中XML转Base64编码结果不一致问题求助
Dart与Java Base64编码结果不一致的解决方法
问题根源
Java的String.getBytes()默认采用平台字符编码(如Windows下的GBK、类Unix系统的UTF-8),而Dart的String.codeUnits返回的是字符串的UTF-16代码单元,二者转换出的字节数组完全不同,最终导致Base64编码结果差异。
统一编码的解决方案
要让两边结果一致,必须保证字符串转字节数组时使用相同的字符编码,推荐使用通用的UTF-8:
Java代码修改
指定UTF-8编码转换字节数组,避免平台依赖:
import java.nio.charset.StandardCharsets; import java.util.Base64; byte[] array = invoiceHashValue_WithQRHash.getBytes(StandardCharsets.UTF_8); String invoiceEncodeData = Base64.getEncoder().encodeToString(array);
Dart代码修改
使用UTF-8编码替代codeUnits转换字节数组:
import 'dart:convert'; List<int> array = utf8.encode(invoiceHashValue_WithQRHash); String invoiceEncodeData = base64Encode(array);
调整后,Java和Dart会基于相同的UTF-8字节数组生成Base64编码,结果将完全匹配。
内容的提问来源于stack exchange,提问作者Scribes Dev
相关产品推荐
相关产品推荐

