java dart /抖动UTF-16编码

ha5z0ras  于 2022-12-17  发布在  Java
关注(0)|答案(3)|浏览(194)

我需要读入一个保存在Java Android Studio中的文件,其中包含以下代码

fos = context.openFileOutput(filename, Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(json);
os.close();
fos.close();

原来Java内部使用UTF-16对字符进行编码。我现在需要在Flutter SDK(使用Dart语言)中读取这些文件

file.readAsString(encoding: Latin1).then((str) => {
       print(str)
     }).catchError( (e) => {
       print(e)
});

然而,Latin 1编码并不能完美地工作,所以我想用UTF-16来读取它,但是看起来Dart根本没有这个功能,或者至少我找不到。
Utf8Codec确实存在,但没有Utf16CodecEncoding.getByName("UTF-16")。顺便说一下,Utf8给出了异常,因此这也是没有选项的。
那么,如何在Dart中读取使用UTF-16保存在Android Studio Java中的文件?

q43xntqr

q43xntqr1#

请使用utfpackage

var bytes = await file.readAsBytes();
  var decoder = Utf16BytesToCodeUnitsDecoder(bytes); // use le variant if no BOM
  var string = String.fromCharCodes(decoder.decodeRest());
gtlvzcf8

gtlvzcf82#

final File file = File(filePath);

  final bytes = file.readAsBytesSync();

  final utf16CodeUnits = bytes.buffer.asUint16List();

  final s = String.fromCharCodes(utf16CodeUnits);

我可以使用这4行代码将UTF-16文件转换为字符串,以避免使用停产的软件包。希望这能有所帮助!

km0tfn4u

km0tfn4u3#

使用Base64。正在导入**“dart:convert'**。

var bytes = await file.readAsBytes();
  final encoded = base64.encode(bytes);
  debugPrint("onPressed " + encoded);

相关问题