¿Qué conjunto de caracteres de varios bytes comienza con 0x7F y 4 bytes de longitud?

StackOverflow https://stackoverflow.com/questions/680495

  •  22-08-2019
  •  | 
  •  

Pregunta

Estoy tratando de conseguir un poco de código heredado para mostrar los caracteres chinos correctamente. Una codificación de caracteres que estoy tratando de trabajar con aperturas con un 0x7F y 4 bytes de longitud (incluyendo el byte 0x7F). ¿Alguien sabe qué tipo de codificación se trata y dónde puedo encontrar información para ello? Gracias ..

ACTUALIZACIÓN: También he tenido que trabajar con un poco de codificación japonesa que comienza cada personaje con un 0xE3 y es tres bytes de longitud. Se muestra en mi equipo correctamente si elijo el idioma japonés en Windows, sin embargo, no se visualiza bien en nuestra aplicación. Sin embargo, si se selecciona cualquier otro local distinto del japonés, ni siquiera puedo ver los nombres de los archivos correctamente. Así que supongo que esta codificación no es Unicode. Alguien sabe lo que es? ¿Es ANSI? ¿Es Shift JIS?

Para el chino, He probado con Unicode y caracteres y yo estoy recibiendo el mismo patrón UTF-8; 0x7F seguido por tres bytes. Son los mismos Unicode y UTF-8?

¿Fue útil?

Solución

  

Una codificación de caracteres que estoy tratando de trabajar con aperturas con un 0x7F y 4 bytes de longitud

¿Cuáles son los otros bytes? ¿Tiene algún texto latino en esta codificación?

Si se trata de “0x7F 0x00 0x00 0x ...” Usted está mirando a UTF-32LE. También podría ser dos UTF-16 (ya sea LE o BE) caracteres.

La mayor parte del este de Asia codificaciones utilizan 0x80-0xFF como bytes de plomo para caracteres no ASCII; no hay ninguno que conozco que utilizaría un 0x7F que lleva como otra cosa que un archivo ASCII elimina nada.

ETA:

  

Se supone que hay marcas de orden de bytes?

No tiene por qué ser una lista de materiales si hay una manera de salir de la banda de la señalización que la codificación es ‘UTF-32LE’ (posiblemente uno que se pierde antes de que llegue a usted).

  

También he tenido que trabajar con un poco de codificación japonesa que comienza cada personaje con un 0xE3 y es tres bytes de longitud.

Eso es sin duda UTF-8. Secuencia 0xE3 0x ... 0x ... resultaría en un personaje entre U + 3000 y U + 4000, que es donde el hiragana / katakana vivo.

  

Se muestra en mi equipo correctamente si elijo el idioma japonés en Windows, sin embargo, no se visualiza bien en nuestra aplicación.

A continuación, es probable que su aplicación es que es una de la horda lamentable de aplicaciones no compatibles con Unicode, sigue utilizando ‘A’ (*) versiones de las interfaces de Win32 dentro de los ‘sufijo-W'queridos. Ya sea que se puede leer en la cadena de acuerdo a su verdadera codificación es discutible:. Una aplicación no compatible con Unicode nunca será capaz de mostrar un ideograma del este asiático en un local Occidental

(*:.. El nombre de “ANSI”, lo cual es engañoso término de Windows para “cualquiera que sea la página de códigos del sistema se establece en en el momento” Por eso es que el cambio de la configuración regional que afectó a)

ETA (2):

OK, lo rompió. No es cualquier codificación estandarizada que he conocido antes, pero es relativamente fácil de descifrar si se asume la premisa de que los puntos de código Unicode se están codificando.

0x00-0x7E: plain ASCII
0x7F A B C: Unicode character

El carácter codificado en un escape Unicode puede calcularse tomando el índice en una cadena de clave de A, B y C y la suma de:

A*0x1000 + B*0x40 + C

Es decir, se trata de un conjunto de caracteres base 64, pero no es la norma habitual en Base64. Un poco de experimentación da una cadena de clave de:

.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

El ‘’ y los caracteres ‘_’ son conjeturas, ya que ninguno de los personajes que posteaste los utiliza. Necesitaríamos más datos para averiguar la cadena exacta.

Así, por ejemplo:

0x7F 3 u g
A=4 B=58 C=44
4*0x1000 + 58*0x40 + 44 = 0x4EAC
U+4EAC = 京

ETA (3):

Sí, debería ser fácil de crear una cadena Unicode nativo mediante la aspiración de cada punto de código de forma manual y se incorporen como un personaje. No estoy seguro de lo que está disponible en cualquier plataforma que está utilizando, pero cualquier plataforma compatible con Unicode debería ser capaz de hacer una cadena de puntos de código simple (y es de esperar sin tener que volver a codificar manualmente a UTF-16LE bytes).

Me imaginé que debe ser puntos de código Unicode al notar que los tres personajes habían ejemplo en el mismo rango general caracteres escapar primero, y en el mismo orden numérico como sus puntos de código Unicode. Los otros dos personajes parecían cambiar de forma aleatoria, por lo que era muy probable que una codificación-big endian del punto de código, y probablemente una codificación base 64 como 6 es tantos bits como se puede salir de ASCII legible.

Norma misma base 64 comienza con las letras, lo que pondría algo a partir de un número demasiado lejos para ser en el plano básico multilingüe. Así que empecé a adivinanzas con ‘0123456789ABCDEFG ...’, que sería la otra opción obvia de la cadena de clave. Eso hizo que los números que estaban cerca de los puntos de código para los caracteres dados resultante, pero un poco demasiado bajo. Inserción de un carácter adicional al comienzo de la cadena de clave (manera que el dígito ‘0’ no se asigna al número 0) consiguió uno de los caracteres correctos y los otros dos muy cerca; la que fue la derecha no tenía letras minúsculas, por lo que cambiar sólolas letras minúsculas que introducen otro personaje entre las mayúsculas y minúsculas. Esto ocurrió con los números de la derecha.

No está garantizado que esto es realmente correcto, pero (aparte de la elección arbitraria de caracteres insertados) que es muy probable que sea.

Otros consejos

Es posible que desee ver en chino codificación de caracteres página en Wikipedia. La única codificación en allí que puedo ver que es siempre 4 bytes es UTF-32 .

GB 18030 es el actual conjunto de caracteres chinos estándar, pero puede ser del 1 al 4 bytes de longitud.

Trate Chardet . Se hace un buen trabajo de adivinar la codificación de caracteres de una cadena de bytes.

  

para Unicode y UTF-8 de la misma?

No. UTF-8 es sólo una manera de representar los caracteres Unicode como una secuencia de bytes. Unicode es el estándar completo, la asignación de identificadores numéricos y legibles a cada personaje, así como gran cantidad de metadatos sobre los personajes.

Podría ser una codificación Unicode válido, como un par suplente UTF-8 o UTF16.

Sí, el chino es UTF-8, una aplicación (codificación) de Unicode. El UTF-8 es de 1 byte para los caracteres ASCII y hasta 4 bytes para otros.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top