2012-05-23 2 views
1

В древние времена, мы можем указать все символы с chr(56)Как создать специальную строку символов в vb.net

Например, говорим, что характер нецензурный. Мы хотим положить его в строку. Просто сделайте

Dim a as string = chr (56) 

Теперь у нас есть UTF8 или unicode (или что-то другое).

Скажем, я хочу, чтобы переменная а содержит

     en space 
     em space 
    thin space 
‌ ‌ ‌  zero width non-joiner 
‍ ‍ ‍  zero width joiner 
‎ ‎ ‎  left-to-right mark 
‏ ‏  right-to-left mark 

В самом деле, сказать, что я хочу, чтобы создать функцию, которая будет избавиться от всех таких символов из моей строки.

Как мне это сделать?

Я хочу, чтобы функция оставила китайские, корейские, японские символы неповрежденными, а затем избавилась от действительно очень расплывчатых.

ответ

1

Replace удаляет все, что вы хотите. ChrW выводит символы Unicode по коду (для создания символов за пределами Unicode Plane 0 вам необходимо объединить 2 Char).

Что-то вроде:

Replace("My text", ChrW(8194), ""); 
+0

Вы уверены? Я думал, что unicode содержит гораздо больше, чем 65 тыс. Символов, а ChrW просто обрабатывает символ 65 тыс. –

+0

Строка - это UTF-16, если вам нужны другие символы Unicode за пределами плоскости 0, вам просто нужно выполнить concat 2 Char для формирования всего символа Юникода - проверьте этот http://stackoverflow.com/questions/697055/c-sharp-and-utf-16- символы и описания самолетов по адресу http://en.wikipedia.org/wiki/Plane_%28Unicode%29 –

1
''' <summary> 
''' This function replaces 'smart quotes' (ASC 145, 146, 147, 148, 150) with their correct ASCII versions (ASC 39, 34, 45), and replaces any other non-ASCII characters with "?" 
''' </summary> 
''' <param name="expression"></param> 
''' <returns></returns> 
''' <remarks></remarks> 
Public Function Unicode2ASCII(ByVal expression As String) As String 
    Dim sb As New System.Text.StringBuilder 
    For i As Integer = 1 To Len(expression) 
    Dim s As String = Mid(expression, i, 1) 
    Select Case Asc(s) 
     Case 145, 146 'apostrophes' 
     sb.Append("'"c) 
     Case 147, 148 'inverted commas' 
     sb.Append(""""c) 
     Case 150 'hyphen' 
     sb.Append("-"c) 
     Case Is > 127 
     sb.Append("?"c) 
     Case Else 
     sb.Append(s) 
    End Select 
    Next i 
    Return sb.ToString 
End Function 

Или добавить их ...

Dim s As String = "a" & ChrW(8194) & "b" 
MsgBox(s) 
+0

Я действительно не думаю, что это будет работать. Все, что вы делаете, это просто посмотреть на восхождение. Мы говорим о гораздо более специальных персонажах, чем о них. –

+0

На самом деле, если вы перейдете на AscW(), вы можете удалить или заменить нужные символы. Разве вы не говорите об их добавлении? В этом случае используйте Char.ConvertFromUtf32() или ChrW() – SSS

0

Похоже, там должно быть лучше, но лучшее, что я могу придумать, что будет работать во всех ситуациях было бы что-то вроде этого:

Private Function getString(ByVal xmlCharacterCode As String) As String 
    Dim doc As XmlDocument = New XmlDocument() 
    doc.LoadXml("<?xml version=""1.0"" encoding=""utf-8""?><test>" + xmlCharacterCode + "</test>") 
    Return doc.InnerText 
End Function 

И затем использовать его как это:

myString = myString.Replace(getString("&#8194;"), "") 

Кроме того, вы можете захотеть взглянуть на эту страницу я Fo унд:

Easy way to convert &#XXXX; from HTML to UTF-8 xml either programmaticaly in .Net or using tools