¿Cuál es la mejor manera de identificar si una cadena (o es) podría ser codificación UTF-8? La API de Win32 IsTextUnicode
no es de mucha ayuda aquí. Además, la cadena no tendrá una BOM UTF-8, por lo que no se puede verificar. Y, sí, ya sé que sólo los personajes por encima del rango ASCII se codifican con más de 1 byte.Howto identificar cadenas UTF-8 codificado
Respuesta
chardet desarrollado por Mozilla utiliza en FireFox. Source code
jchardet es un puerto java de la fuente del algoritmo de detección automático de conjuntos de caracteres de mozilla.
NCharDet es un puerto .Net (C#) de un puerto Java de C++ utilizado en los navegadores Mozilla y FireFox.
Code project C# muestra que utiliza el MLang de Microsoft para la detección de codificación de caracteres.
UTRAC es una herramienta de línea de comandos y una biblioteca escrita en C++ para detectar serie de codificación
cpdetector es una biblioteca de Delphi se utiliza para la codificación de detección de
Otro post útil que apunta a una gran cantidad de bibliotecas para ayudarle a determinar codificación de caracteres http://fredeaker.blogspot.com/2007/01/character-encoding-detection.html
También puede consultar la pregunta relacionada How Can I Best Guess the Encoding when the BOM (Byte Order Mark) is Missing?, tiene algunos contenidos útiles.
No hay una manera realmente confiable, pero básicamente, como una secuencia aleatoria de bytes (por ejemplo, una cadena en una codificación estándar de 8 bits) es muy poco probable que sea una cadena UTF-8 válida (si el bit más significativo de un byte activada, hay reglas muy específicas en cuanto a qué tipo de bytes puede seguirlo en UTF-8), puede intentar decodificar la cadena como UTF-8 y considerar que es UTF-8 si no hay errores de decodificación.
determinar si hubo errores de descodificación es otro problema por completo, muchas bibliotecas Unicode simplemente reemplazar caracteres no válidos con un signo de interrogación sin indicar si se produjo o no un error. Por lo tanto, necesita una forma explícita de determinar si se produjo un error durante la decodificación o no.
This W3C page tiene una expresión regular de Perl para la validación de detección de conjunto de caracteres UTF-8
Si está leyendo una secuencia y es posible que no tenga el comienzo, debe perder el \ A al principio o agregar un ". {0,5}?" justo después para capturar el primer carácter truncado. – mat
Recomiendo hacer esto usando la biblioteca Unicode estándar del idioma en lugar de volver a implementarla a través de expresiones regulares. – Laurent
Para realizar la detección de carácter en rubí instalar el 'Chardet' joya
sudo gem install chardet
He aquí un pequeño script de rubí para funcionar Chardet sobre el flujo de entrada estándar.
require "rubygems"
require 'UniversalDetector' #chardet gem
infile = $stdin.read()
p UniversalDetector::chardet(infile)
Chardet da salida a una conjetura en la codificación de conjunto de caracteres y también un nivel de confianza (0-1) a partir de su análisis estadístico
biblioteca independienteC/C++ basado en detector conjunto de caracteres de Mozilla
https://github.com/batterseapower/libcharsetdetect
Detector universal de conjuntos de caracteres (UCSD) Una biblioteca que expone una interfaz C y una interfaz libre de dependencia a la biblioteca UCSD de Mozilla C++. Esta biblioteca proporciona un conjunto de heurísticas de gran precisión que intentan determinar el conjunto de caracteres utilizado para codificar algunos textos de entrada. Esto es extremadamente útil cuando su programa tiene que manejar un archivo de entrada que se suministra sin ningún metadato de codificación.
No se ha especificado un idioma, pero en PHP puede utilizar mb_check_encoding
if(mb_check_encoding($yourDtring, 'UTF-8'))
{
//the string is UTF-8
}
else
{
//string is not UTF-8
}
En Windows, puede utilizar MultiByteToWideChar()
con la página de códigos CP_UTF8
y la bandera MB_ERR_INVALID_CHARS
. Si la función falla, la cadena no es válida UTF-8.
para Win32, puede utilizar la API de mlang, esto es parte de Windows y apoyado desde Windows XP, lo bueno de esto es que se le da estadísticas de la probabilidad de la entrada es de estar en una codificación particular:
CComPtr<IMultiLanguage2> lang;
HRESULT hr = lang.CoCreateInstance(CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER);
char* str = "abc"; // EF BB BF 61 62 63
int size = 6;
DetectEncodingInfo encodings[100];
int encodingsCount = 100;
hr = lang->DetectInputCodepage(MLDETECTCP_NONE, 0, str, &size, &encodings, &encodingsCount);
- 1. SQL Server utf8 howto?
- 2. clearTaskOnLaunch HowTo?
- 3. Compilación (javac) de un código fuente Java codificado en UTF8 con una lista de materiales
- 4. ¿Cómo me aseguro de que el texto codificado en un formulario sea utf8
- 5. Regex para eliminar caracteres no alfanuméricos de cadenas UTF8
- 6. ios Codificación UTF8 de nsstring
- 7. Decodificación UTF8 con NSString
- 8. Howto desinstalación RVM
- 9. HowTo: Teamcity + GitHub
- 10. c expresión regular howto
- 11. Howto make javax.faces.model.SelectItem seleccionado
- 12. JavaScript decorators HOWTO?
- 13. C# UTF8 Lectura/Salida
- 14. ¿Cómo forzar a XPath a usar UTF8?
- 15. Java + MySQL UTF8 Problema
- 16. Cómo convertir ISO8859-15 a UTF8?
- 17. HowTo Unit Client Client Code
- 18. JNA C DLL Debug Howto?
- 19. Django en GoogleAppEngine: Howto rendimiento
- 20. Python: ¿qué arregla "...". Encode ("utf8")?
- 21. ¿Cómo generar un archivo codificado en UTF16 como ascii (o UTF8) en el símbolo del sistema de PowerShell?
- 22. Cómo mostrar UTF8 en Netbeans 7?
- 23. UTF8 y Javascript
- 24. php form submit utf8?
- 25. WebClient Unicode - ¿Qué UTF8?
- 26. Convierte latin1 a UTF8
- 27. Procesamiento UTF8 en C
- 28. codificación Java UTF8
- 29. knitr y codificación UTF8
- 30. Almacenar una cadena como UTF8 en C#
¿En qué idioma está intentando esto? –
Realmente no importa - Estoy buscando un método general. Pero si puedes dar algo que funcione para un idioma en particular, entonces por favor entra. –
Y, no encontrarás una lista de materiales al comienzo de una secuencia UTF-8, no tiene sentido ya que UTF-8 es el mismo orden de bytes es. – mat