2 votos

Conversión script para combinar caracteres Unicode?

Tengo un texto griego que utilizaba caracteres combinados para todas las letras acentuadas. Algún proceso que estaba utilizando con él los convertía automáticamente en el equivalente de un solo carácter.  Esto me causa un problema porque necesito que las dos versiones coincidan en otra aplicación.  O al menos que se clasifiquen en el mismo orden.

Puedo buscar uno a la vez y usar find/replace para arreglar ese, pero esto es bastante tedioso.

¿Existe una forma sencilla de convertirlos todos? No puedo hacer el original como se hizo la segunda versión, porque son tipos de archivo diferentes.

4voto

Martin R Puntos 181

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

2voto

PATRY Puntos 3068

Una aplicación para MacOS que puede realizar este tipo de conversiones es UnicodeChecker . Crea varios servicios a los que puede acceder cuando selecciona texto en un documento.

0voto

benwiggy Puntos 8

BBEdit tiene un comando 'Precomponer Unicode' en su menú Texto. También hay un comando AppleScript del mismo nombre en la biblioteca AS de la aplicación.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X