Aquí hay algunas opciones para convertir todos los caracteres Unicode descompuestos en su forma precompuesta. Asumiré que los archivos están codificados en UTF-8.
iconv
iconv
es una herramienta de conversión de conjuntos de caracteres (basada en el iconv
funciones de conversión de conjuntos de códigos). En MacOS, admite la codificación "UTF-8-MAC" para los caracteres UTF-8 descompuestos (véase ¿Cuál es la diferencia y el uso de las codificaciones UTF-8 y UTF-8-MAC en iconv? ).
Uso:
iconv -f UTF-8-MAC -t UTF-8 < decomposed.txt > composed.txt
Encontré que iconv
tiene problemas con los caracteres fuera del plano básico multilingüe (emojis, banderas, ...). Por ejemplo, no puede convertir los caracteres o . Las siguientes soluciones no tienen ese problema.
Perl
Un simple Perl script (encontrado aquí en Stack Overflow) puede convertir UTF-8 descompuesto a precompuesto:
#!/usr/bin/perl
use Encode qw/decode_utf8 encode_utf8/;
use Unicode::Normalize;
while (<>) {
print encode_utf8( NFC(decode_utf8 $_) );
}
Uso:
perl compose.pl < decomposed.txt > composed.txt
Perl también tiene el -i
para modificar un archivo "in situ":
perl -i compose.pl file.txt
uconv
(Encontrado aquí en el Stack Exchange de Unix y Linux). uconv
no forma parte de MacOS, pero puede instalarse desde Homebrew ( brew install icu4c
) o Macports ( port install icu
).
Uso:
uconv -x any-nfc < decomposed.txt > composed.txt
Swift
Si tienes Xcode instalado en tu ordenador entonces un simple Swift script hace el truco:
#!/usr/bin/swift
import Foundation
while let line = readLine() {
print(line.precomposedStringWithCanonicalMapping)
}
Uso:
swift compose.swift < decomposed.txt > composed.txt