2009-11-25 6 views
5

Estoy tratando de evaluar diferentes estrategias para la comparación de cadenas UTF-8 insensible a mayúsculas y minúsculas.Pliegue de mayúsculas UTF-8 sin conocer el idioma

He leído un material del consorcio Unicode, he experimentado con la UCI y he intentado encontrar varias alternativas de calidad de implementación.

En varias ocasiones he visto textos diferentes entre el mapeo simple de casos y el mapeo completo de casos, y quería asegurarme de entender la diferencia por completo.

Según lo leí, Simple Case Mapping es "libre de contexto", es decir, no necesita saber qué idioma es la carga útil. Esto dará resultados aproximados, debido a la debacle turca "I/ı/İ/i".

El mapeo completo de casos, por otro lado, necesita conocer el lenguaje de la carga útil para poder realizar la asignación. Con esa información adicional, puede tomar medidas especiales para cubrir casos donde "Kim" como cuerda turca debería convertirse en "KIM" en mayúscula, pero "Kim" como una cadena en inglés, debería convertirse en "KIM" en mayúscula.

¿Lo tengo bien?

¿Hay otros ejemplos de puntos de código "multifacéticos" que se pliegan de manera diferente para diferentes idiomas?

Gracias!

ACTUALIZACIÓN: Una de las fuentes que menciona el mapeo de casos simples como independiente del lenguaje es ICU's documentation. Lo interpreté como la verdad de Unicode, pero tal vez es solo una declaración de la implementación.

Respuesta

2

No, un "mapeo de casos completos" es una carcasa donde un punto de código necesita ser reemplazado por más de un nuevo punto de código. Un mapeo de caso simple es una única sustitución de punto de código.

Si desea implementar esto usted mismo, entonces el archivo Unicode CaseFolding.txt es crucial para hacerlo bien. Tenga en cuenta el código de campo de estado "T", específicamente allí para manejar el problema turco I.

+0

Entonces, ambos necesitan el contexto del idioma, ¿verdad? Utilizo una biblioteca de terceros (PCRE) que no usa CaseFolding.txt, pero solo la información del caso de UnicodeData.txt, y no requiere el contexto del lenguaje (ni explícita ni implícitamente, por lo que puedo decir). Pensé que tal vez era un compromiso válido en el caso Simple. –

+0

Absolutamente. Como se indica en el archivo, necesitará saber cuándo ignorar los registros con el código de estado "T". –

+0

Por lo que puedo ver, el código de estado T aparece en CaseFolding.txt, y no UnicodeData.txt. ¿Pero realmente está diciendo que el plegado correcto solo puede hacerse con conocimiento del contexto del lenguaje? Estoy buscando un compromiso que no requiera el contexto, y que no sea 100% perfecto ... ¿Pero tal vez ese sea el primer paso en el camino hacia la calidez? –

2

Bien ... La combinación de consonantes "SS" bajaría a "ss" para la mayoría de los idiomas occidentales, pero en alemán podría convertirse en la letra especial "ß". Eso es solo "poder", hay bastante implicado usage rules a considerar.

Creo que esto no afecta directamente el orden de clasificación (aunque, por supuesto, los alemanes son bienvenidos a corregirme), así que tal vez sea un punto discutible.

+0

Gracias! ¿Entendí correctamente la diferencia entre el mapeo Simple y Completo? –

+3

Aunque el uppercasing "ß" le dará "SS", no he visto ningún marco que haga el opuesto (minúscula ("SS") para dar como resultado "ß"). Esto se debe a que a veces debe ser "ss" y la única forma de decidir es tener un diccionario completo de alemán. Y a veces incluso eso no es suficiente (por ejemplo, tanto "weiss" como "weiß" son palabras correctas). De hecho, ni siquiera un humano puede minúsculas "WEISS" sin contexto (lo que significa). –

+0

@Mihai - gracias, eso tiene sentido. Pensé lo mismo, esa subida sería mucho más fácil que bajar. –

Cuestiones relacionadas