2011-01-12 15 views
16

W poniższym kodzie, wykorzystanie łańcucha "“" (czyli lewy podwójny cudzysłów wewnątrz ciągu znaków) powoduje błąd kompilacji w VB.NET:Korzystanie lewo podwójnych cudzysłowów w ciągi w VB

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

Co tu się dzieje?

+2

Przykro mi to słyszeć, dzięki za dzielenie się. :( – Mehrdad

+2

Przy okazji, to jest cholernie podchwytliwy problem +1 do zadawania pytania –

+0

+1 Mam ten sam problem –

Odpowiedz

14

wydaje się, jeśli chcesz zamienić cudzysłowy z ich odpowiedników kodu HTML.

Na pierwszy rzut oka twój kod jest absolutnie poprawny. Problem polega na tym, że VB umożliwia kręcone cytaty zamiast zwykłych cytatów w kodzie (ponieważ Unicode jest świetny, prawda?). Oznacza to, że następujące kody są równoważne:

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

Teraz, jeśli chcesz użyć cudzysłów wewnątrz ciąg, VB nie wie, czy cudzysłów ma zakończyć ciąg, czy nie . W języku C# zostałoby to ustalone przez , co powodowałoby uniknięcie znacznika cudzysłowu, tj. W miejsce napisałbyś "\"". W języku VB to samo następuje przez podwojeniepod numerem, to jest """".

Powrót do kręconych cytatów. To samo, co w przypadku prostych kwotowań, stosuje się zgodnie ze specyfikacją języka VB (¶1.6.4). Więc napisać kręcone cytat w kodzie, spróbuj wykonać następujące czynności:

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

Niestety, nie mogę wypróbować ten kod i teraz to jest zupełnie możliwe, że po prostu zastępuje IDE to prostymi cytatami. Jeśli to przypadek, alternatywą jest użycie Chr lub ChrW z kodem znaku „lewicy znak podwójnego cudzysłowu”:

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

lub dla symetrii, napisany w systemie dziesiętnym (ale wolę szesnastkowy kodów znaków) :

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

Coś innego: funkcja Replace będzie prawdopodobnie wkrótce przestarzałe i doesn’t work everywhere (np Windows Phone 7).Zamiast tego należy użyć metody Replace klasy String:

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

OMG! Przykro mi, Visual Basic! –

+1

Tak, masz rację. Nie wiedziałem o tym. Ale kiedy już to usłyszysz, to naprawdę ma sens. Świetna odpowiedź. +1 –

+1

"" "" nie działa; IDE zastępuje kręcone cytaty. ChrW uratował mój dzień. Dzięki! – raven

0

wygląda ona jakbyś szukając ChrW function w Microsoft.VisualBasic nazw, który jest używany do konwersji kodu znaków Unicode do rzeczywistego charakteru .

Jeśli próbujesz zastąpić proste cytaty w ciągu z cudzysłowy, spróbuj następujący kod:

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

Lub, jeśli próbujesz do kodowania lewej stoi cudzysłowy w krótkim ciąg zastępując je alternatywnym zapisie (przy założeniu, że jeden został użyty w tej kwestii jest prawidłowe), spróbuj następujący kod:

'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, czy to możliwe, że wprowadzasz w błąd kilka rzeczy? Kod OP wygląda on chce zamienić kręcone cytaty na ich kod ewidencyjny HTML i ten kod jest absolutnie poprawny, ani "& #" nie jest błędne, ani też średnik. (Widzę, że OP zaakceptował twoją odpowiedź, więc może się mylę, ale ja nie sądzę) –

+0

@Konrad: Tak, to jest więcej niż możliwe.Byłem w ciemno, gdy próbował odpowiedzieć na pytanie.Nie było dla mnie jasne, co on próbuje osiągnąć kod: –

+0

kod i problem jest całkiem jasny, gdy znasz jeden ważny faktor o VB, jak radzi sobie z kręconymi cudzysłowami i ucieka. ;-) Problem w tym, że nikt, nawet doświadczeni programiści VB, nie wiedzą o tym ... Zobacz moją odpowiedź. –

Powiązane problemy