¿Alguien sabe una manera fácil de encontrar caracteres en Unicode que son similares a los caracteres ASCII. Un ejemplo es "CYRILLIC SMALL LETTER DZE (ѕ)". Me gustaría hacer una búsqueda y reemplazar por personajes similares. Por similar quiero decir legible por humanos. No puedes ver la diferencia mirándolo.Buscar carácter ASCII similar en Unicode
Respuesta
Como señalaron otros comentaristas, Unicode normalisation ("caracteres compatibles") no lo ayudará aquí ya que no está buscando equivalencias oficiales, sino similitudes en glifos (formas de letras). (Sin embargo, vale la pena leer el Informe técnico de Unicode vinculado, ya que está extremadamente bien escrito.)
Si yo fuera usted, para ahorrarle el tedioso trabajo de armar una lista de caracteres usted mismo, buscaría recursos en homograph attacks: este es un método para confundir maliciosamente a los usuarios de la web al mostrar URL que contienen nombres de dominio en los que algunas letras han sido reemplazadas por letras visualmente similares. Otro Unicode Technical Report, sobre seguridad, contiene una sección sobre el problema. También existe, y eso es lo que más necesita, un "confusables" table. Aquí hay otro artículo con signos de puntuación principalmente, algunos de los cuales ASCII, que tienen equivalentes visualmente similares en el non-ASCII code tables.
Lo que sí espero es que no esté haciendo la pregunta para construir un ataque así.
Consulte la base de datos Unicode: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.
Cada línea describe un caharacter Unicode, por ejemplo:
1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
Si hay alguna caracteres similares (compatible) para ese símbolo, que aparecerá en el campo de la entrada <compat>
. En este ejemplo, 0061
(ASCII a
) es compatible con el carácter Unicode LATIN SMALL LETTER A WITH RIGHT HALF RING
.
En cuanto a su carácter, la entrada es
0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
que, como se puede ver, no especifica un carácter compatibilidad.
El campo de compatibilidad describe una secuencia de caracteres que significaría lo mismo que el personaje en cuestión. En su ejemplo, la secuencia compatible sería 'U + 0061' (la letra 'a') seguida por' U + 02BE' (el modificador 'medio anillo derecho'). Para los personajes de diferentes alfabetos, sería bastante inusual que haya secuencias de compatibilidad, y eso haría que lo que el PO intenta hacer sea imposible sin más información. – cHao
El OP indica 'similar a caracteres ASCII', no es exacto. Si está buscando una 'a' con un medio anillo derecho, puede conformarse con un ASCII 'a' si no hay nada más disponible. – adamk
De acuerdo, en ese caso. Pero si está buscando un carácter ASCII similar a un cirílico & # x0455 ;, que es el mismo ejemplo que utilizó el OP, eso no funcionará. – cHao
- 1. Cómo convertir un carácter Unicode a su equivalente ASCII
- 2. C# ASCII o Unicode
- 3. Carácter Unicode: carro
- 4. Regex cualquier carácter ascii
- 5. NSString - Unicode a ASCII equivalente
- 6. regex carácter unicode en vim
- 7. carácter espejo Unicode?
- 8. ¿El valor de varchar de Postgresql se basa en la longitud del carácter unicode o la longitud del carácter ASCII?
- 9. Convertir una cadena Unicode en una cadena ASCII de escape
- 10. cómo decodificar un carácter no unicode en python?
- 11. UnicodeEncodeError: el códec 'ascii' no puede codificar el carácter [...]
- 12. JSON especifica "cualquier carácter UNICODE"?
- 13. Convertir del carácter hexadecimal al carácter Unicode en python
- 14. ¿Cómo puedo representar un carácter Unicode en una cadena literal ISO/ANSI C cuando el conjunto de caracteres es ASCII?
- 15. Unicode, UTF, ASCII, ANSI diferencias de formato
- 16. Buscar imágenes de color similar
- 17. ¿Cómo poner un carácter Unicode en XAML?
- 18. Ruby: carácter de ASCII de una cadena
- 19. advertencia: carácter no identificable para codificar ASCII
- 20. Cómo convertir un carácter ascii en un int en C
- 21. Cómo convertir un valor ASCII en un carácter en .NET
- 22. ¿Cómo puedo sustituir caracteres Unicode por ASCII en Perl?
- 23. Cómo manejar caracteres Unicode (no ASCII) en Python?
- 24. Renderizar HTML en plantilla django (no unicode pero ASCII)
- 25. Cómo convertir hebreo (unicode) a Ascii en C#?
- 26. Reemplazar caracteres no ASCII de una cadena Unicode en Python
- 27. Convierte dos caracteres ascii en su representación Ascii extendida de un carácter 'correspondiente'
- 28. Obtener el valor unicode de un carácter
- 29. Cadenas Unicode en Ruby 1.9
- 30. Buscar 'grep-similar' mediante funciones de PostgreSql
Gracias por todos los buenos enlaces y explicaciones. De hecho, trato de protegerme contra tales ataques. :-) Y creo que encontraré más material con la palabra clave "homógrafo de ataque". – DrDol
Eso es bueno para escuchar :). Sí, esa es la palabra clave que necesitas! Edité un enlace (apuntaba a una versión obsoleta). – chryss
Un uso legítimo: para las pruebas de internacionalización, tengo una herramienta que genera texto falso en un idioma extranjero usando caracteres similares. Un examinador de habla inglesa puede leer el texto "extranjero", pero también puede decir claramente que no es un inglés codificado. Aunque no funciona si el carácter Unicode es tan similar que no puede ver la diferencia. Principalmente hago cosas como agregar acentos a las vocales. – Kip