3 votos

Cambio de codificación de caracteres de Unicode a Ascii

Necesito convertir el codificación de caracteres en algunos archivos de texto creados por una aplicación de terceros en mi MBP Catalina 10.15.6. Estoy en aguas desconocidas aquí, así que por favor indulte mi ignorancia. También, por favor, tenga en cuenta que la aplicación de terceros es no el tema de esta pregunta - entender cómo conciliar los diferentes juegos de caracteres utilizados en MacOS es el tema.

Utilizo una aplicación ( LTspice ) en mi MBP ocasionalmente. También hay una versión para Windows de LTspice. LTspice proporciona una interfaz gráfica de usuario para crear un esquema de circuito, y LTspice crea un archivo de texto plano (extensión .asc) para codificar el esquema y otras directivas y parámetros creados en la interfaz gráfica de usuario de LTspice; este es el archivo que necesito convertir.

Supuse que los archivos .asc no estaban codificados en ASCII, por lo que ejecuté el programa file utilidad en el .asc para saber cómo se codificaron:

% file -I '/Users/seamus/Documents/LTspice/Rounding demo-MacMod.asc'
/Users/seamus/Documents/LTspice/Rounding demo-MacMod.asc: application/octet-stream; charset=binary

¡¿Binario?! ... Esto no tiene sentido para mí. Puedo abrir y editar este archivo en TextEdit . Todos los caracteres son caracteres ASCII reconocibles - lo que entiendo que es un subconjunto de UTF-8 .

Mi siguiente paso fue abrir el archivo en el BBedit aplicación. Esto reveló nueva información. Según BBedit El demo-MacMod.asc archivo reportado por file -I como binario es en realidad: "UTF-16 Little Endian" formato. Sé que esto es confuso... En un esfuerzo por aclarar, he puesto un par de capturas de pantalla a continuación para ilustrar cómo este archivo se representa en BBedit y TextEdit . El byte extra ( ¿ ) en el BBedit La captura de pantalla es un NUL.

Necesito un método (que pueda automate/script ) para convertir estos "UTF-16 Little Endian" archivos a "US-ASCII" . Pensé que el iconv herramienta sería perfecta para este trabajo:

iconv -l
...
# long list of character encodings which included:
US-ASCII
UCS-2LE UNICODELITTLE

UCS-2LE UNICODELITTLE parecía el mejor partido para "UTF-16 Little Endian" pero..:

% iconv -f 'UCS-2LE UNICODELITTLE' -t 'US-ASCII' '/Users/seamus/Documents/LTspice/Rounding demo-MacMod.asc' > '/Users/seamus/Documents/LTspice/Rounding demo-MacMod-iconvASCII.asc'
iconv: conversion from UCS-2LE UNICODELITTLE unsupported
iconv: try 'iconv -l' to get the list of supported encodings

No sé por qué recibo esta respuesta. Claramente iconv -l dice que UCS-2LE UNICODELITTLE es compatible. Ya sea el correcto para "UTF-16 Little Endian" es otra cuestión, pero no encuentro nada en la lista que parezca ser mejor.

Esta es la esencia de mi pregunta. Creo que se puede responder de dos maneras:

  1. ¿Cuál es mi error en el uso de iconv o en mi lectura de man iconv o iconv -l ?

  2. ¿Existe otra opción para convertir "UTF-16 Little Endian" a "US-ASCII" que pueda ser automatizada/secuenciada?

PANTALLAS:

en TextEdit:

enter image description here

en BBedit:

enter image description here

0 votos

Es más correcto describir UTF-8 como un superconjunto de ASCII.

1voto

Pedro Puntos 111

Con BBEdit esto es fácil. Primero abra el archivo en BBEdit. Si dejas que BBEdit instale su herramienta de línea de comandos puedes incluso hacerlo desde el Terminal con bbedit /path/to/filename . Si el archivo se ha abierto con una codificación incorrecta, seleccione File > Reopen Using Encoding > correct encoding . Creo que valdría la pena intentar reabrir usando UTF-16 Little-Endian & UTF-16 Little-Endian, no BOM para ver si alguno de ellos tiene el archivo abierto como se desea. Cuando tenga el archivo correctamente abierto, seleccione File > Save As... . En el cuadro de diálogo Guardar como puede elegir la codificación deseada, y también el tipo de final de línea si eso importa.

Para tratar los signos de interrogación rojos invertidos, probablemente nulos (ASCII 0), seleccione Text > Zap Gremlins... para el diálogo de abajo...

enter image description here

Usando las opciones que se muestran allí debería dar un estado como el que se ve en TextEdit. Pruebe diferentes opciones en copias de un par de sus archivos.

Debido a que BBEdit tiene una herramienta de línea de comandos, usted debe ser capaz de scribir una vez que tenga las opciones correctas. BBEdit también funciona con AppleScript y Automator.

Puedes descargar BBEdit gratis desde el enlace que he dado. Se iniciará en el modo de demostración, y cuando el modo de demostración expira continuará funcionando en el modo libre donde las características que usted necesita están todavía disponibles.

0 votos

Gracias - Creí que había dejado claro en mi pregunta que esto se puede hacer en BBedit, pero la respuesta que necesito es una que pueda script/automatizar: Is there another option for converting "UTF-16 Little Endian" to "US-ASCII" that can be automated/scripted?

0 votos

¡Uy! He omitido una parte entera de mi respuesta. Vuelve a mirar dentro de unos minutos.

1 votos

Tengo una licencia de BBedit (lo he usado durante años y me encanta), así que voy a mirar la herramienta de línea de comandos. He preguntado al soporte técnico de BBedit sobre las opciones de automatización, sin embargo, y no mencionaron la herramienta de línea de comandos...

0voto

Joel Puntos 112
  1. ¿Cuál es mi error en el uso de iconv, o en mi lectura de man iconv o iconv -l?

El error era simplemente lectura errónea la salida de iconv -l :

iconv -l
...
# long list of character encodings which included:
US-ASCII
UCS-2LE UNICODELITTLE

La codificación de caracteres se lee correctamente como UCS-2LE - no UCS-2LE UNICODELITTLE . Usando eso como la opción en iconv :

% iconv -f 'UCS-2LE' -t 'US-ASCII' '/Users/seamus/Documents/LTspice/Rounding demo-MacMod.asc' > '/Users/seamus/Documents/LTspice/Rounding demo-MacMod-iconvASCII.asc'

Lo que da la conversión deseada de "UTF-16 Little Endian" a "US-ASCII"

En cuanto a la pregunta re file -I informando de este archivo de texto como binario archivo - No tengo ni idea en este momento.

0 votos

Binario ya que tiene finales de línea de Windows y bytes no en 1-127 es decir no ascII. Así que no puede ser leído y el contenido interpretado o al menos no cumple con una secuencia de bytes conocida

0 votos

@mmmmmm: ¿Estás diciendo que "si no es ASCII, entonces es binario"? La aplicación TextEdt lo abre y renderiza perfectamente, como si fuera un archivo ASCII.

0 votos

El texto probablemente utiliza un algoritmo diferente para averiguar lo que el archivo es. Tenga en cuenta que está en utf16 de algún tipo no ascii

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