No existe tal solución "correcta", porque para cualquier carácter Unicode dado que no hay "contraparte ASCII" definido.
Por ejemplo, tome los caracteres aparentemente simples que desee asignar a comillas simples y dobles ASCII y guiones. Primero, generemos todos los caracteres Unicode con sus nombres oficiales. En segundo lugar, permite encontrar todas las comillas, guiones y guiones de acuerdo con los nombres:
#!/usr/bin/env python3
import unicodedata
def unicode_character_name(char):
try:
return unicodedata.name(char)
except ValueError:
return None
# Generate all Unicode characters with their names
all_unicode_characters = []
for n in range(0, 0x10ffff): # Unicode planes 0-16
char = chr(n) # Python 3
#char = unichr(n) # Python 2
name = unicode_character_name(char)
if name:
all_unicode_characters.append((char, name))
# Find all Unicode quotation marks
print (' '.join([char for char, name in all_unicode_characters if 'QUOTATION MARK' in name]))
# " « » ‘ ’ ‚ ‛ “ ” „ ‟ ‹ › ❛ ❜ ❝ ❞ ❟ ❠ ❮ ❯ ⹂ 〝 〞 〟 "
# Find all Unicode hyphens
print (' '.join([char for char, name in all_unicode_characters if 'HYPHEN' in name]))
# - ֊ ᐀ ᠆ ‐ ‑ ‧ ⁃ ⸗ ⸚ ⹀ ゠ ﹣ -
# Find all Unicode dashes
print (' '.join([char for char, name in all_unicode_characters if 'DASH' in name and 'DASHED' not in name]))
# ‒ – — ⁓ ⊝ ⑈ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ╌ ╍ ╎ ╏ ⤌ ⤍ ⤎ ⤏ ⤐ ⥪ ⥫ ⥬ ⥭ ⩜ ⩝ ⫘ ⫦ ⬷ ⸺ ⸻ ⹃ 〜 〰 ︱ ︲ ﹘
Como se puede ver, tan fácil como este ejemplo es, hay muchos problemas. Hay muchas comillas en Unicode que no se parecen en nada a las comillas en US-ASCII y hay muchos guiones en Unicode que no se parecen en nada al signo de guión negativo en US-ASCII.
Y hay muchas preguntas. Por ejemplo:
- ¿se debe reemplazar el símbolo "SWUNG DASH" (SW) por un guión ASCII (-) o una tilde (~)?
- ¿Debería reemplazarse "CANADIAN SYLLABICS HYPHEN" (CAN) por un guión ASCII (-) o un signo igual (=)?
- caso de que el "apunta hacia la izquierda COMILLA ANGULAR SIMPLE" (<) se sustituye con una comilla ASCII ("), un apóstrofo (') o un signo menor que (<)?
Para establezca una contraparte ASCII "correcta", alguien debe responder estas preguntas en función del contexto de uso. Por eso, todas las soluciones a su problema se basan en un diccionario de mapas de una manera u otra. Y todas estas soluciones proporcionarán resultados diferentes.
¿Por qué no usar solo unicode? (Sé que usted sabe que es una opción) También, hay una lista unicode oficial de caracteres confusibles que pueden ayudar si tiene que hacer su propio. – Marcin
Yo uso UTF8/unicode. Algunas personas usan el área de texto para escribir su contenido, así que ahora tengo una combinación de ambos estilos de cotización dependiendo de quién escribió algo que es bastante feo. – ThiefMaster
¿Qué tal un formateador de rebajas para normalizar esas cosas? – Marcin