Tengo varios archivos que están en varios idiomas diferentes. Pensé que todos estaban codificados en UTF-8, pero ahora no estoy tan seguro. Algunos personajes se ven bien, otros no. ¿Hay alguna forma de que pueda romper las cadenas y tratar de identificar los conjuntos de caracteres? Tal vez dividir en el espacio en blanco y luego identificar cada palabra? Finalmente, ¿hay una manera fácil de traducir caracteres de un conjunto a UTF-8?¿Cómo determino el conjunto de caracteres de una cadena?
Respuesta
Si no conoce el juego de caracteres para asegurarse de que sólo se puede adivinar, básicamente. utf8::valid podría ayudarte con eso, pero realmente no puedes estar seguro. Si sabes que si no es unicode, debe ser un juego de caracteres específico (como Latin-1), tienes suerte. Si no tienes idea, estás jodido. En cualquier caso, siempre debe suponer que el archivo completo está en el mismo juego de caracteres, a menos que se especifique lo contrario. Perderás la cordura si no lo haces.
cuanto a su pregunta de cómo convertir entre conjuntos de caracteres: Encode hay que hacer eso para usted
La determinación de si un archivo es, probablemente, UTF-8 o no debería ser bastante fácil. Determinar la codificación si no es UTF-8 sería muy difícil en general.
Si el archivo está codificado con UTF-8, los bits altos de cada byte deben seguir un patrón. Si un carácter es un byte, su bit alto se borrará (cero). De lo contrario, un carácter de n
bytes (donde n es 2 – 4) tendrá los altos n
bits del primer byte establecidos en uno, seguidos de un único bit cero. Los siguientes n - 1
bytes deberían tener el bit más alto establecido y el segundo bit más alto borrado.
Si todos los bytes en su archivo siguen estas reglas, es probable que esté codificado con UTF-8. Digo probablemente, porque cualquiera puede inventar una nueva codificación que siga las mismas reglas, deliberadamente o por casualidad, pero interpreta los códigos de manera diferente.
Tenga en cuenta que un archivo codificado con US-ASCII seguirá estas reglas, pero el bit alto de cada byte es cero. Está bien tratar un archivo como UTF-8, ya que son compatibles en este rango. De lo contrario, es otra codificación, y no hay una prueba inherente para distinguir la codificación. Tendrás que usar algunos conocimientos contextuales para adivinar.
- 1. ¿Cómo determino eficientemente el palindrome de caracteres individuales más largo en una cadena dada?
- 2. ¿Cómo verificar el conjunto de caracteres de cadena en Java?
- 3. En Java, ¿cómo determino dinámicamente el tipo de una matriz?
- 4. En Perl, ¿cómo reemplazo un conjunto de caracteres con un conjunto diferente de caracteres en una sola pasada? Dada
- 5. Cadena contiene solo un conjunto dado de caracteres
- 6. ¿Cómo convierto una cadena de caracteres en una cadena wchar_t?
- 7. C estándar: conjunto de caracteres y codificación cadena especificación
- 8. ¿Cómo eliminar caracteres especiales de una cadena?
- 9. ¿Cómo eliminar caracteres inválidos de una cadena?
- 10. Cómo reemplazar caracteres en una cadena java?
- 11. conjunto de caracteres de conexión de conjunto de PyMySQL
- 12. Cómo repetir un conjunto de caracteres
- 13. Eliminar caracteres de una cadena
- 14. Recortar caracteres de una cadena
- 15. Eliminación de caracteres duplicados de una cadena
- 16. Invertir una cadena en el conjunto MIPS
- 17. Ordenando Caracteres de una Cadena de C++
- 18. ¿Cómo determino scrollHeight?
- 19. Cómo dividir una cadena por x cantidad de caracteres
- 20. ¿Cómo determino HResult para System.IO.IOException?
- 21. Entidades de caracteres HTML y conjunto de codificación de caracteres
- 22. Java: ¿Cómo dividir una cadena por una cantidad de caracteres?
- 23. Reemplazar los caracteres incorrectos de una Cadena con caracteres incorrectos
- 24. ¿Cómo obtener una cadena entre dos caracteres?
- 25. Cómo mezclar caracteres en una cadena
- 26. ¿Cómo determino la desviación estándar (stddev) de un conjunto de valores?
- 27. cómo quitar los caracteres en una cadena?
- 28. Cómo eliminar caracteres repetidos en una cadena
- 29. ¿Cómo puedo representar un carácter Unicode en una cadena literal ISO/ANSI C cuando el conjunto de caracteres es ASCII?
- 30. ¿Cómo crear una lista con los caracteres de una cadena?