2011-01-12 28 views
16

En siguiente código, el uso de la cadena de "“" (es decir, una marca izquierda doble cita dentro de una cadena) se traduce en un error de compilación en VB.NET:Uso de izquierda comillas dobles en las cadenas en VB

StringVar = Replace(StringVar, "“", "“") 

¿Que está pasando aqui?

+2

Siento oír eso, gracias por compartir. :( – Mehrdad

+2

Por cierto, este es un problema extremadamente difícil. +1 para hacer la pregunta. –

+0

+1 Tengo el mismo problema. –

Respuesta

14

parece como si desea reemplazar las comillas con su equivalente en código HTML.

A primera vista, su código es absolutamente correcto. El problema es que VB permite comillas en lugar de comillas regulares en el código (porque Unicode es genial, ¿no?). Es decir, los códigos siguientes son equivalentes:

Dim str = "hello" 
Dim str = “hello” 
Dim str = "hello“ 

Ahora, si desea utilizar una comilla dentro de una cadena, VB no sabe si se supone que el signo de comillas para poner fin a la cadena o no . En C#, esto se solucionaría con escapando la comilla, es decir, en lugar de """ escribiría "\"". En VB, lo mismo se hace por doblando la comilla, es decir, """".

De nuevo a su cita rizada. Lo mismo que para las comillas simples se aplica según la especificación del lenguaje VB (¶1.6.4). Así que para escribir una cotización rizado en el código, intente lo siguiente:

StringVar = Replace(StringVar, "““", "“") 

Por desgracia, no puedo probar este código ahora y es muy posible que el IDE se limite a sustituir este por comillas rectas. Si ese es el caso, una alternativa es utilizar Chr o ChrW con el código de caracteres del “signo de comillas dobles izquierda”:

StringVar = Replace(StringVar, ChrW(&H201C), "“") 

O, por simetría, escrito en notación decimal (pero prefiero hexadecimal para los códigos de caracteres) :

StringVar = Replace(StringVar, ChrW(8220), "“") 

otra cosa: la función Replace probablemente pronto será obsoleto y doesn’t work everywhere (por ejemplo Windows Phone 7).En su lugar, utilice el método Replace de la clase String:

StringVar = StringVar.Replace(, ChrW(8220), "“") 
+3

¡OMG! ¡Que te jodan, Visual Basic! –

+1

Sí, tienes razón. No lo sabía. Pero una vez que lo escuchas, tiene perfecto sentido realmente. Gran respuesta. +1 –

+1

"" "" no funciona; el IDE reemplaza las comillas rizadas. ChrW me salvó el día, sin embargo. ¡Gracias! – raven

0

Se ve como que está en busca de la ChrW function en el Microsoft.VisualBasic espacio de nombres, que se utiliza para convertir un código de caracteres Unicode en el carácter real .

Si usted está tratando de reemplazar comillas rectas en una cadena con comillas curvas, pruebe el siguiente código:

'Declare a string that uses straight quotes 
Dim origString As String = "This string uses ""quotes"" around a word." 

'Create a new string by replacing the straight quotes from the original string 
'with left-facing curly quotes 
Dim newString As String = origString.Replace("""", ChrW(8220)) 

'Display the result 
MessageBox.Show(newString) 

O, si usted está tratando de codificar las comillas curvas izquierda-se enfrentan en una cadena reemplazándolos con una notación alternativa (asumiendo la misma que utilizó en la pregunta es correcta), pruebe el siguiente código:

'Declare a string that uses left-facing curly quotes 
Dim origString As String = "This string uses fancy " & ChrW(8220) & _ 
          "quotes" & ChrW(8220) & " around a word." 

'Create a new string by replacing the curly quotes with an arbitrary string 
Dim newString As String = origString.Replace(ChrW(8220), "“") 

'Display the result 
MessageBox.Show(newString) 
+0

Cody, ¿es posible que esté confundiendo algunas cosas? El código del OP parece él quiere reemplazar las comillas con su código HTML de escape. Y ese código es absolutamente correcto. Ninguno de los dos está "& #" mal, ni el punto y coma. (Veo que el OP ha aceptado tu respuesta, entonces quizás estoy equivocado, pero no lo creo). –

+0

@Konrad: Sí, es más que posible. Hice una puñalada ciega en la oscuridad cuando trataba de responder la pregunta. No estaba del todo claro para mí lo que está tratando de hacer. lograr –

+0

el código y el problema es bastante claro una vez que conoces un factoid importante sobre VB, cómo maneja las comillas, y escapando; ;-) El problema es que nadie, ni siquiera los programadores experimentados de VB, lo saben ... Ver mi respuesta –

Cuestiones relacionadas