latin1 în Dart

Codec-urile Latin-1 (ISO-8859-1, 256 de caractere) și ASCII (128 de caractere), un octet pe caracter.

Sintaxă
import 'dart:convert';

const Latin1Codec latin1
const AsciiCodec ascii

Ce face latin1

latin1 codifică fiecare caracter într-un singur octet, pentru caracterele cu codul 0–255 (literele vest-europene, ca é, ü, â, î). ascii acceptă doar caracterele 0–127: litere englezești, cifre, semne de punctuație.

Ambele au encode și decode, ca utf8. Literele ă, ș, ț nu există nici în Latin-1, nici în ASCII: encode aruncă ArgumentError. Le folosești doar pentru fișiere sau protocoale vechi care cer explicit aceste codificări; în rest, alege UTF-8.

La decode, allowInvalid: true înlocuiește octeții din afara intervalului cu � în loc să arunce eroare.

Ce returnează

encode: octeții; decode: textul.

Exemple

Exemplul 1: Ce caractere acceptă fiecare

import 'dart:convert';

void main() {
  print(latin1.encode('café'));
  print(utf8.encode('café'));
  print(ascii.encode('Ana 10'));
  for (final cuvant in ['café', 'Iași']) {
    try {
      ascii.encode(cuvant);
      print('$cuvant: ASCII ok');
    } on ArgumentError {
      print('$cuvant: nu se poate scrie în ASCII');
    }
  }
}

Rezultat

[99, 97, 102, 233]
[99, 97, 102, 195, 169]
[65, 110, 97, 32, 49, 48]
café: nu se poate scrie în ASCII
Iași: nu se poate scrie în ASCII

Exemplul 2: Fișier UTF-8 citit greșit ca Latin-1

Fiecare octet devine un caracter separat: așa apar textele stricate de tipul î.

import 'dart:convert';

void main() {
  final octeti = utf8.encode('Pâine și înghețată');
  print(latin1.decode(octeti));
  print(utf8.decode(octeti));
  print(ascii.decode([65, 200, 66], allowInvalid: true));
}

Rezultat

Pâine și înghețată
Pâine și înghețată
A�B

Greșeli frecvente

  • Codifici text românesc cu latin1: ș și ț nu există acolo și primești ArgumentError.
  • Citești un fișier UTF-8 ca Latin-1 (sau invers): diacriticele apar stricate. Codificarea la citire trebuie să fie aceeași cu cea de la scriere.

Comenzi înrudite

  • utf8: Codec-ul UTF-8: encode transformă textul în octeți, decode transformă octeții înapoi în text.
  • base64Encode: base64Encode transformă octeți în text Base64; base64Decode face invers, din text Base64 în octeți.