visual uso poner net ejemplos dobles concatenar como comillas agregar c# smart-quotes

uso - substring c# ejemplos



C#¿Cómo reemplazar las citas inteligentes de Microsoft con comillas simples? (10)

Mi post a continuación me preguntó qué eran las comillas y por qué mi aplicación no funcionaría con ellas, mi pregunta ahora es ¿cómo puedo reemplazarlas cuando mi programa las encuentre? ¿Cómo puedo hacer esto en C #? ¿Son personajes especiales?

curly-quotation-marks-vs-square-quotation-marks-what-gives

Gracias


Cuando encontré este problema, escribí un método de extensión para la clase String en C #.

public static class StringExtensions { public static string StripIncompatableQuotes(this string s) { if (!string.IsNullOrEmpty(s)) return s.Replace(''/u2018'', ''/''').Replace(''/u2019'', ''/''').Replace(''/u201c'', ''/"'').Replace(''/u201d'', ''/"''); else return s; } }

Esto simplemente reemplaza las tontas ''citas inteligentes'' con comillas normales.

[EDITAR] Solucionado para que también sea compatible con la sustitución de ''comillas dobles inteligentes''.


De acuerdo con la aplicación de Mapa de caracteres que viene con Windows, los valores Unicode para las comillas son 0x201c y 0x201d. Reemplace esos valores con la cita recta 0x0022, y debería estar listo para continuar.

String.Replace(0x201c, ''"''); String.Replace(0x201d, ''"'');


Tenga en cuenta que lo que tiene es intrínsecamente un archivo CSV corrupto. Cambiar indiscriminadamente las citas de todos los tipógrafos con comillas simples no necesariamente arreglará su archivo. Por lo que usted sabe, se suponía que algunas de las citas del tipógrafo estaban allí, como parte del valor de un campo. Sustituirlos por comillas simples puede que tampoco te dejen con un archivo CSV válido.

No creo que haya una forma algorítmica de arreglar un archivo que está dañado en la forma que describes. Su tiempo podría ser mejor invertido en investigar cómo se obtienen esos archivos inválidos en primer lugar, y luego detenerlo. ¿Alguien está usando Word para editar sus archivos de datos, por ejemplo?


Una lista más extensa de personajes problemáticos

if (buffer.IndexOf(''/u2013'') > -1) buffer = buffer.Replace(''/u2013'', ''-''); if (buffer.IndexOf(''/u2014'') > -1) buffer = buffer.Replace(''/u2014'', ''-''); if (buffer.IndexOf(''/u2015'') > -1) buffer = buffer.Replace(''/u2015'', ''-''); if (buffer.IndexOf(''/u2017'') > -1) buffer = buffer.Replace(''/u2017'', ''_''); if (buffer.IndexOf(''/u2018'') > -1) buffer = buffer.Replace(''/u2018'', ''/'''); if (buffer.IndexOf(''/u2019'') > -1) buffer = buffer.Replace(''/u2019'', ''/'''); if (buffer.IndexOf(''/u201a'') > -1) buffer = buffer.Replace(''/u201a'', '',''); if (buffer.IndexOf(''/u201b'') > -1) buffer = buffer.Replace(''/u201b'', ''/'''); if (buffer.IndexOf(''/u201c'') > -1) buffer = buffer.Replace(''/u201c'', ''/"''); if (buffer.IndexOf(''/u201d'') > -1) buffer = buffer.Replace(''/u201d'', ''/"''); if (buffer.IndexOf(''/u201e'') > -1) buffer = buffer.Replace(''/u201e'', ''/"''); if (buffer.IndexOf(''/u2026'') > -1) buffer = buffer.Replace("/u2026", "..."); if (buffer.IndexOf(''/u2032'') > -1) buffer = buffer.Replace(''/u2032'', ''/'''); if (buffer.IndexOf(''/u2033'') > -1) buffer = buffer.Replace(''/u2033'', ''/"'');


También tengo un programa que hace esto, la fuente está en este archivo del Fixer CP-1252 . También define algunas asignaciones para convertir caracteres dentro de cadenas RTF conservando todo el formato, lo que puede ser útil para algunos.

También es un mapeo completo de todos los caracteres de "comillas inteligentes" para sus contrapartes de baja ascii, códigos de entidades y referencias de caracteres.


Pruebe esto para comillas simples inteligentes si lo anterior no funciona:

string.Replace("/342/200/230", "''") string.Replace("/342/200/231", "''")

Pruebe esto también para dobles comillas inteligentes:

string.Replace("/342/200/234", ''"'') string.Replace("/342/200/235", ''"'')


El equivalente de VB de lo que escribió @Matthew:

Public Module StringExtensions <Extension()> Public Function StripIncompatableQuotes(BadString As String) As String If Not String.IsNullOrEmpty(BadString) Then Return BadString.Replace(ChrW(&H2018), "''").Replace(ChrW(&H2019), "''").Replace(ChrW(&H201C), """").Replace(ChrW(&H201D), """") Else Return BadString End If End Function End Module


Para ampliar la respuesta popular de Nick van Esch, aquí está el código con los nombres de los personajes en los comentarios.

if (buffer.IndexOf(''/u2013'') > -1) buffer = buffer.Replace(''/u2013'', ''-''); // en dash if (buffer.IndexOf(''/u2014'') > -1) buffer = buffer.Replace(''/u2014'', ''-''); // em dash if (buffer.IndexOf(''/u2015'') > -1) buffer = buffer.Replace(''/u2015'', ''-''); // horizontal bar if (buffer.IndexOf(''/u2017'') > -1) buffer = buffer.Replace(''/u2017'', ''_''); // double low line if (buffer.IndexOf(''/u2018'') > -1) buffer = buffer.Replace(''/u2018'', ''/'''); // left single quotation mark if (buffer.IndexOf(''/u2019'') > -1) buffer = buffer.Replace(''/u2019'', ''/'''); // right single quotation mark if (buffer.IndexOf(''/u201a'') > -1) buffer = buffer.Replace(''/u201a'', '',''); // single low-9 quotation mark if (buffer.IndexOf(''/u201b'') > -1) buffer = buffer.Replace(''/u201b'', ''/'''); // single high-reversed-9 quotation mark if (buffer.IndexOf(''/u201c'') > -1) buffer = buffer.Replace(''/u201c'', ''/"''); // left double quotation mark if (buffer.IndexOf(''/u201d'') > -1) buffer = buffer.Replace(''/u201d'', ''/"''); // right double quotation mark if (buffer.IndexOf(''/u201e'') > -1) buffer = buffer.Replace(''/u201e'', ''/"''); // double low-9 quotation mark if (buffer.IndexOf(''/u2026'') > -1) buffer = buffer.Replace("/u2026", "..."); // horizontal ellipsis if (buffer.IndexOf(''/u2032'') > -1) buffer = buffer.Replace(''/u2032'', ''/'''); // prime if (buffer.IndexOf(''/u2033'') > -1) buffer = buffer.Replace(''/u2033'', ''/"''); // double prime


Tengo un gran ... gran programa ... que hace precisamente esto. Puede arrancar el script y usarlo a su gusto. Realiza todo tipo de reemplazos, y se encuentra en http://bitbucket.org/nesteruk/typografix


funcionó para mí, puedes probar el código siguiente

string replacedstring = ("your string with smart quotes").Replace(''/u201d'', ''/''');

¡Gracias!