Support Unicode encode

This commit is contained in:
wanghongenpin
2024-09-22 01:44:56 +08:00
parent 248576b103
commit e152f9b9e6
7 changed files with 36 additions and 21 deletions

View File

@@ -12,6 +12,7 @@ import 'package:network_proxy/network/util/logger.dart';
enum EncoderType {
url,
base64,
unicode,
md5;
static EncoderType nameOf(String name) {
@@ -39,6 +40,7 @@ class _EncoderState extends State<EncoderWidget> with SingleTickerProviderStateM
var tabs = const [
Tab(text: 'URL'),
Tab(text: 'Base64'),
Tab(text: 'Unicode'),
Tab(text: 'MD5'),
];
@@ -154,6 +156,8 @@ class _EncoderState extends State<EncoderWidget> with SingleTickerProviderStateM
result = base64.encode(utf8.encode(inputText));
case EncoderType.md5:
result = md5.convert(inputText.codeUnits).toString();
case EncoderType.unicode:
result = encodeToUnicode(inputText);
}
} catch (e) {
FlutterToastr.show(localizations.encodeFail, context);
@@ -181,6 +185,8 @@ class _EncoderState extends State<EncoderWidget> with SingleTickerProviderStateM
result = String.fromCharCodes(compressed);
}
case EncoderType.md5:
case EncoderType.unicode:
result = decodeFromUnicode(inputText);
}
} catch (e, t) {
logger.e("$e", error: e, stackTrace: t);
@@ -188,4 +194,14 @@ class _EncoderState extends State<EncoderWidget> with SingleTickerProviderStateM
}
outputTextController.text = result;
}
String encodeToUnicode(String input) {
return input.runes.map((rune) => '\\u${rune.toRadixString(16).padLeft(4, '0')}').join();
}
String decodeFromUnicode(String input) {
return input.replaceAllMapped(RegExp(r'\\u([0-9a-fA-F]{4})'), (match) {
return String.fromCharCode(int.parse(match.group(1)!, radix: 16));
});
}
}

View File

@@ -91,6 +91,13 @@ class _ToolboxState extends State<Toolbox> {
child: const Column(children: [Icon(Icons.currency_bitcoin), Text('Base64')]),
)),
const SizedBox(width: 15),
InkWell(
onTap: () => encodeWindow(EncoderType.unicode, context),
child: Container(
padding: const EdgeInsets.all(10),
child: const Column(children: [Icon(Icons.format_underline), Text('Unicode')]),
)),
const SizedBox(width: 15),
InkWell(
onTap: () => encodeWindow(EncoderType.md5, context),
child: Container(