Использование левых двойных кавычек в строках в VB - PullRequest
16 голосов
/ 12 января 2011

В следующем коде использование строки "“" (то есть левая двойная кавычка внутри строки) приводит к ошибке компиляции в VB.NET:

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

Что здесь происходит?

Ответы [ 3 ]

15 голосов
/ 12 января 2011

Кажется, что вы хотите заменить фигурные кавычки на их HTML-эквивалент.

На первый взгляд, ваш код абсолютно корректен. Проблема в том, что VB допускает фигурные кавычкивместо обычных кавычек в коде (потому что Unicode отличный, верно?).То есть все следующие коды эквивалентны:

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

Теперь, если вы хотите использовать кавычку внутри строки, VB не знает, предполагается ли кавычказаканчивать строку или нет.В C # это было бы исправлено с помощью , экранируя кавычку, то есть вместо """, который вы написали бы "\"".В VB то же самое делается путем удвоения кавычки, то есть """".

Назад к вашей фигурной цитате.То же, что и для прямых кавычек, применяется в соответствии со спецификацией языка VB (.61.6.4).Поэтому, чтобы написать фигурную кавычку в коде, попробуйте следующее:

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

К сожалению, я не могу попробовать этот код сейчас, и вполне возможно, что IDE просто заменит его на прямые кавычки.Если это так, альтернативой является использование Chr или ChrW с кодом символа «левой двойной кавычки»:

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

Или для симметрии, записанной в десятичном виде (но япредпочитаю шестнадцатеричное значение для кодов символов):

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

Что-то еще: функция Replace, вероятно, скоро станет устаревшей, а не будет работать везде (например, Windows Phone 7 ).Вместо этого используйте метод Replace класса String:

StringVar = StringVar.Replace(, ChrW(8220), "“")
0 голосов
/ 12 января 2011

Это выглядит как будто вы ищете ChrW функцию в пространстве имен Microsoft.VisualBasic, которое используется для преобразования кода символа Unicode в фактический характер.

Если вы пытаетесь заменить прямые кавычки в строке фигурными кавычками, попробуйте следующий код:

'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)

Или, если вы пытаетесь закодировать левые фигурные кавычки в строке, заменяя их альтернативными обозначениями (при условии, что вы использовали правильный вопрос), попробуйте следующий код:

'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 голосов
/ 12 января 2011

См. http://msdn.microsoft.com/en-us/library/613dxh46%28v=vs.71%29.aspx

Попробуйте: StringVar = Replace(StringVar, "“", ChrW(&H8220))

...