Dart SystemEncoding tutorial shows how to work with system default encoding in Dart using the SystemEncoding class.
last modified April 4, 2025
The SystemEncoding class in Dart provides access to the system’s default encoding for converting between bytes and strings. It’s part of Dart’s dart:convert library.
SystemEncoding uses the platform’s default encoding (often UTF-8 on modern systems). It’s useful when working with system APIs or files that use the system’s native encoding.
SystemEncoding is an Encoding subclass that represents the default encoding of the current system. It handles text conversion based on the platform’s locale settings.
Key methods include encode() for string-to-bytes conversion and decode() for bytes-to-string conversion. It’s automatically used by many system APIs.
This example shows basic encoding and decoding using SystemEncoding.
main.dart
import ‘dart:convert’;
void main() { var encoding = const SystemEncoding(); var text = ‘Dart SystemEncoding’;
// Encode string to bytes var bytes = encoding.encode(text); print(‘Encoded bytes: $bytes’);
// Decode bytes back to string var decoded = encoding.decode(bytes); print(‘Decoded text: $decoded’); }
We create a SystemEncoding instance, encode a string to bytes, then decode it back. This demonstrates the basic conversion cycle using system encoding.
$ dart main.dart Encoded bytes: [68, 97, 114, 116, 32, 83, 121, 115, 116, 101, 109, 69, 110, 99, 111, 100, 105, 110, 103] Decoded text: Dart SystemEncoding
This example demonstrates using SystemEncoding when reading and writing files.
main.dart
import ‘dart:convert’; import ‘dart:io’;
void main() async { var file = File(‘system_encoding.txt’); var encoding = const SystemEncoding();
// Write using system encoding await file.writeAsString(‘System Encoding Test’, encoding: encoding);
// Read using system encoding var content = await file.readAsString(encoding: encoding); print(‘File content: $content’);
// Show raw bytes var bytes = await file.readAsBytes(); print(‘File bytes: $bytes’); }
We use SystemEncoding to ensure proper text handling with the file system. The encoding parameter ensures consistent character conversion on all platforms.
$ dart main.dart File content: System Encoding Test File bytes: [83, 121, 115, 116, 101, 109, 32, 69, 110, 99, 111, 100, 105, 110, 103, 32, 84, 101, 115, 116]
This example compares SystemEncoding with UTF-8 for non-ASCII text.
main.dart
import ‘dart:convert’;
void main() { var systemEnc = const SystemEncoding(); var utf8Enc = utf8; var text = ‘Dart ñ SystemEncoding’;
var systemBytes = systemEnc.encode(text); var utf8Bytes = utf8Enc.encode(text);
print(‘SystemEncoding bytes: $systemBytes’); print(‘UTF-8 bytes: $utf8Bytes’);
print(‘System decode: ${systemEnc.decode(systemBytes)}’); print(‘UTF-8 decode: ${utf8Enc.decode(utf8Bytes)}’); }
We compare how SystemEncoding and UTF-8 handle non-ASCII characters. Results may vary based on the platform’s default encoding.
$ dart main.dart SystemEncoding bytes: [68, 97, 114, 116, 32, 241, 32, 83, 121, 115, 116, 101, 109, 69, 110, 99, 111, 100, 105, 110, 103] UTF-8 bytes: [68, 97, 114, 116, 32, 195, 177, 32, 83, 121, 115, 116, 101, 109, 69, 110, 99, 111, 100, 105, 110, 103] System decode: Dart ñ SystemEncoding UTF-8 decode: Dart ñ SystemEncoding
This example demonstrates how SystemEncoding behaves differently across platforms.
main.dart
import ‘dart:convert’; import ‘dart:io’;
void main() { var encoding = const SystemEncoding(); var text = ‘Flutter 跨平台开发’;
try { var bytes = encoding.encode(text); print(‘Encoded successfully on ${Platform.operatingSystem}’); print(‘Byte length: ${bytes.length}’); } catch (e) { print(‘Encoding failed on ${Platform.operatingSystem}: $e’); } }
This code may succeed or fail based on the platform’s default encoding capabilities. Some systems may not support all Unicode characters.
$ dart main.dart Encoded successfully on linux Byte length: 20
This example shows converting between SystemEncoding and other encodings.
main.dart
import ‘dart:convert’;
void main() { var systemEnc = const SystemEncoding(); var latin1Enc = latin1; var text = ‘Dart Encoding: €’;
// Encode with system encoding var systemBytes = systemEnc.encode(text);
// Convert to Latin-1 (may lose information) try { var latin1Text = latin1Enc.decode(systemBytes); print(‘Latin-1 conversion: $latin1Text’); } catch (e) { print(‘Conversion failed: $e’); }
// Round-trip through system encoding var roundTrip = systemEnc.decode(systemEnc.encode(text)); print(‘Round-trip: $roundTrip’); }
We demonstrate potential issues when converting between encodings. The euro symbol (€) may not be supported in all encodings, leading to conversion errors or data loss.
$ dart main.dart Conversion failed: FormatException: Invalid byte in Latin1 string Round-trip: Dart Encoding: €
Platform awareness: Remember SystemEncoding varies by platform
UTF-8 preference: Use UTF-8 for cross-platform consistency
Error handling: Handle potential encoding/decoding errors
Explicit encoding: Specify encodings when interoperability matters
Testing: Test encoding behavior on all target platforms
Dart SystemEncoding Documentation
This tutorial covered Dart’s SystemEncoding class with practical examples showing basic usage, platform considerations, and encoding conversion scenarios.
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.
List all Dart tutorials.