¿Hay alguna manera de verificar si el texto Unicode está en cierto idioma?

Obtendré el texto de un usuario que necesito validar es un personaje chino.

¿Hay alguna manera de que pueda verificar esto?

De acuerdo con la información proporcionada aquí en el sitio web de Unicode , puede encontrar el bloque de chino o cualquier otro idioma y luego implementar un analizador para verificar si una palabra está en el rango o no. al igual que

public bool IsChinese(string text) { return text.Any(c => c >= 0x20000 && c < = 0xFA2D); } 

Tenga en cuenta que

Como una referencia útil, el Consorcio Unicode proporciona aquí una interfaz de búsqueda para la base de datos Unicode Hàn (漢) (Unihan) .

El enlace de la base de datos que proporcioné arriba te muestra los personajes

Puede usar una expresión regular para que coincida con los bloques con nombre admitidos :

 private static readonly Regex cjkCharRegex = new Regex(@"\p{IsCJKUnifiedIdeographs}"); public static bool IsChinese(this char c) { return cjkCharRegex.IsMatch(c.ToString()); } 

Entonces, puedes usar:

 if (sometext.Any(z=>z.IsChinese())) DoSomething(); 

Como varias personas mencionadas aquí, en caracteres unicode, chino, japón y coreano están codificadas juntas, y hay varios rangos para ella. https://en.wikipedia.org/wiki/CJK_Compatibility

Por simplicidad, aquí hay una muestra de código que detecta todo el rango de CJK:

 public bool IsChinese(string text) { return text.Any(c => (uint)c >= 0x4E00 && (uint)c < = 0x2FA1F); } 

Simplemente revise los caracteres para ver si los puntos de código están en el (los) rango (s) deseado (s). Por ejemplo, mira esta pregunta:

¿Cuál es el rango completo para caracteres chinos en Unicode?

De acuerdo con la wikipedia ( https://en.wikipedia.org/wiki/CJK_Compatibility ) hay varios diapasones de códigos de caracteres. Aquí está mi enfoque para detectar caracteres chinos basados ​​en el enlace de arriba (código en F #, pero se puede convertir fácilmente)

  let isChinese(text: string) = text |> Seq.exists (fun c -> let code = int c (code >= 0x4E00 && code < = 0x9FFF) || (code >= 0x3400 && code < = 0x4DBF) || (code >= 0x3400 && code < = 0x4DBF) || (code >= 0x20000 && code < = 0x2CEAF) || (code >= 0x2E80 && code < = 0x31EF) || (code >= 0xF900 && code < = 0xFAFF) || (code >= 0xFE30 && code < = 0xFE4F) || (code >= 0xF2800 && code < = 0x2FA1F) ) 

en caracteres unicode, chino, japón y coreano están codificados juntos.

visite este FAQ: http://www.unicode.org/faq/han_cjk.html

el carácter chino se distribuye en varios bloques.

visite esta wiki: https://en.wikipedia.org/wiki/CJK_Unified_Ideographs

Encontrará que hay varios gráficos de caracteres cjk en el sitio web Unicode.

Para simplificar, puedes usar el mínimo y máximo rango de caracteres chinos:

0x4e00 y 0x2fa1f para verificar.

Esto funcionó para mí:

 var charArray = text.ToCharArray(); var isChineseTextPresent = false; foreach (var character in charArray) { var cat = char.GetUnicodeCategory(character); if (cat != UnicodeCategory.OtherLetter) { continue; } isChineseTextPresent = true; break; } 

Debe consultar la base de datos de caracteres Unicode, que contiene información sobre cada carácter Unicode. Probablemente hay una función de utilidad en C # que puede hacer esto por usted. De lo contrario, puedes descargarlo de internet.