2011-01-12 3 views
16

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

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

Что тут происходит?

+2

Жаль слышать, что, спасибо за обмен. :( – Mehrdad

+2

Кстати, это проклятая сложная проблема: +1 за вопрос. –

+0

+1 У меня такая же проблема. –

ответ

14

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

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

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

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

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

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

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

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

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

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

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

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

OMG! Винт, Visual Basic! –

+1

Да, ты прав. Я этого не знал. Но как только вы это услышите, это действительно имеет смысл. Отличный ответ. +1 –

+1

"" "" не работает; среда IDE заменяет фигурные кавычки. Тем не менее, ChrW сохранил мой день. Благодаря! – raven

0

Это выглядит как вы ищете ChrW function в 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

Коди, возможно, вы что-то путаете? Код OP выглядит он хочет заменить кудрявые кавычки на свой код escape-кода HTML. И этот код абсолютно правильный. Ничто не ошибочно, и точка с запятой (я вижу, что OP принял ваш ответ, поэтому, возможно, я ошибаюсь, но я не думаю, что так) –

+0

@ Konrad: Да, это более чем возможно. Я сделал слепой удар в темноте, когда пытался ответить на вопрос. Мне было совершенно не ясно, что он пытается –

+0

Код и проблема на самом деле довольно понятны, когда вы знаете один важный факт о VB, как он обрабатывает фигурные кавычки и ускользает. ;-) Проблема в том, что никто, даже не закаленные программисты VB, не знает этого .... См. Мой ответ. –