utf8 unidades una texto secuencia representa getbytes example como codigo codificar bytes acentos c# string character-encoding

getbytes - representa texto como una secuencia de unidades de codigo utf-16 c#



¿Cómo verifico que una cadena está en inglés? (13)

¿Tienes acceso a la web? Supongo que no se puede garantizar, pero Google tiene una API de idioma que detectará el idioma que se le pasa. google idioma api

Leí una cadena desde la consola. ¿Cómo me aseguro de que solo contenga caracteres y dígitos en inglés?


Algo así (si quieres controlar la entrada):

static string ReadLettersAndDigits() { StringBuilder sb = new StringBuilder(); ConsoleKeyInfo keyInfo; while ((keyInfo = Console.ReadKey(true)).Key != ConsoleKey.Enter) { char c = char.ToLower(keyInfo.KeyChar); if ((''a'' <= c && c <= ''z'') || char.IsDigit(c)) { sb.Append(keyInfo.KeyChar); Console.Write(c); } } return sb.ToString(); }


Como muchos indicaron, la respuesta aceptada funciona solo si hay una sola palabra en la cadena. Como no hay respuestas que cubran el caso de varias palabras o incluso oraciones en la cadena, aquí está el código:

stringToCheck.Any(x=> char.IsLetter(x) && !((int)x >= 63 && (int)x <= 126));


Estoy de acuerdo con las respuestas de Expresión Regular. Sin embargo, puede simplificarlo a solo "^ [/ w] + $". / w es cualquier "carácter de palabra" (que se traduce en [a-zA-Z_0-9] si usas un alfabeto que no sea Unicode. No sé si también quieres guiones bajos).

Más información sobre expresiones regulares en .net aquí: http://msdn.microsoft.com/en-us/library/ms972966.aspx#regexnet_topic8


La expresión regular de respuesta aceptada no admite espacios en blanco ni puntuación. A continuación se prueba el código para esta entrada:

123 abc! ?? -_) (/ /;:

text1 = "123 abc! ?? -_)(/// ; :"; bool t = Regex.IsMatch(text1, "^[a-zA-Z0-9. -_?]*$") //true text2 = "ف"; bool f = Regex.IsMatch(text2, "^[a-zA-Z0-9. -_?]*$") //false


No utilice RegEx y LINQ; son más lentos que el bucle por caracteres de cadena

Prueba de rendimiento

Mi solución:

private static bool is_only_eng_letters_and_digits(string str) { foreach (char ch in str) { if (!(ch >= ''A'' && ch <= ''Z'') && !(ch >= ''a'' && ch <= ''z'') && !(ch >= ''0'' && ch <= ''9'')) { return false; } } return true; }


Otra forma es verificar si IsLower y IsUpper no devuelven verdadero. Algo como :

private bool IsAllCharEnglish(string Input) { foreach (var item in Input.ToCharArray()) { if (!char.IsLower(item) && !char.IsUpper(item) && !char.IsDigit(item) && !char.IsWhiteSpace(item)) { return false; } } return true; }

y para usarlo:

string str = "فارسی abc"; IsAllCharEnglish(str); // return false str = "These are english 123"; IsAllCharEnglish(str); // return true


Puedes ^[a-zA-Z0-9]*$ con esta expresión regular: ^[a-zA-Z0-9]*$

  • ^ coincide con el inicio de la cadena (es decir, no se permiten caracteres antes de este punto)
  • [a-zA-Z0-9] coincide con cualquier letra de az en mayúsculas o minúsculas, así como con los dígitos 0-9
  • * permite que el partido anterior se repita cero o más veces
  • $ coincide con el final de la cadena (es decir, no se permiten caracteres después de este punto)

Para usar la expresión en un programa de C #, deberá importar System.Text.RegularExpressions y hacer algo como esto en su código:

bool match = Regex.IsMatch(input, "^[a-zA-Z0-9]*$");

Si va a probar muchas líneas con el patrón, es posible que desee compilar la expresión:

Regex pattern = new Regex("^[a-zA-Z0-9]*$", RegexOptions.Compiled); for (int i = 0; i < 1000; i++) { string input = Console.ReadLine(); pattern.IsMatch(input); }


Si no quiero usar RegEx, y solo para proporcionar una solución alternativa, puede simplemente verificar el código ASCII de cada carácter y si se encuentra entre ese rango, podría ser una letra en inglés o un número (Esto podría no ser el mejor solución):

foreach (char ch in str.ToCharArray()) { int x = (int)char; if (x >= 63 and x <= 126) { //this is english letter, i.e.- A, B, C, a, b, c... } else if(x >= 48 and x <= 57) { //this is number } else { //this is something diffrent } }

http://en.wikipedia.org/wiki/ASCII para ver la tabla ASCII completa.

Pero sigo pensando, RegEx es la mejor solución.


Suponiendo que los "caracteres en inglés" simplemente se refieren al alfabeto latino de 26 caracteres, esta sería un área en la que usaría expresiones regulares: ^[a-zA-Z0-9 ]*$

Por ejemplo:

if( Regex.IsMatch(Console.ReadLine(), "^[a-zA-Z0-9]*$") ) { /* your code */ }

El beneficio de las expresiones regulares en este caso es que lo único que realmente te importa es si una cadena coincide con un patrón o no, en este caso las expresiones regulares funcionan de maravilla. Captura claramente su intención y es fácil de ampliar si la definición de "caracteres ingleses" se extiende más allá de los 26 alfabéticos.

Aquí hay una serie de artículos decentes que enseñan más sobre las expresiones regulares.

La respuesta de Jørn Schou-Rode proporciona una gran explicación de cómo la expresión regular que se presenta aquí funciona para que coincida con su entrada.


bool AllAscii(string str) { return !str.Any(c => !Char.IsLetterOrDigit(c)); }


bool onlyEnglishCharacters = !EnglishText.Any(a => a > ''~'');

Parece barato, pero funcionó para mí, legítima respuesta fácil. Espero que ayude a cualquiera.


<?php $string="हिन्दी"; $string="Manvendra Rajpurohit"; echo strlen($string); echo ''<br>''; echo mb_strlen($string, ''utf-8''); echo ''<br>''; if(strlen($string) != mb_strlen($string, ''utf-8'')) { echo "Please enter English words only:("; } else { echo "OK, English Detected!"; } ?>