Арабский язык кажется бредом - PullRequest
1 голос
/ 09 марта 2012

Мои пользователи копируют и вставляют арабский текст из арабской газеты в текстовую область. Я хотел бы иметь возможность хранить арабский язык в виде кодов символов, таких как & # 1500; & # 1501; и так далее. Как я могу это сделать?

Когда я использую следующий фрагмент, я получаю неправильные номера ... Прежде всего, каждый символ, который я конвертирую в число, заканчивается как 3 цифры, тогда как я знаю, что арабские символы кодировки - это 4 цифры.

IncomingArabic = request("IncomingArabic") 
MaxLen = Len(IncomingArabic)  
For i = 1 To MaxLen
    curChar = Mid(IncomingArabic, lLoop, 1)
    ''# curChar is an arabic char
    iChr = Asc(curChar)  ''# this gives me a 3 digit! And when I tried HEX(curChar) here, it gave a type mismatch error. 

    Encoded = Encoded & "&#" & iChr & ";"
Next
Response.write Encoded ''# shows gibberish! 

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Вот что я бы сделал.Переключите все, чтобы использовать UTF-8.Убедитесь, что страница, отправляющая форму, отправлена ​​с Response.CharSet = "UTF-8" и Response.CodePage = 65001.Делают ли они то же самое на принимающей странице.Теперь вам не нужно ничего портить, независимо от того, какой язык используется.

0 голосов
/ 09 марта 2012

Ну, я разобрался.Просто используйте функцию арабизации, которую я разместил ниже.

''# example usage
response.write Arabize(request("IncomingArabic")) //gives you the correct 4 digit sequence!  


Function Arabize(Str)
  Dim Bytes
  dim FromCharset, ToCharset
  FromCharset = "windows-1256"
  ToCharset = "windows-1256"
  Bytes = StringToBytes(Str, FromCharset)
  dim temp
  temp = BytesToString(Bytes, ToCharset)
  Arabize = server.htmlencode(temp)

End Function 

''# you are gonna need the rest too... 
Const adTypeBinary = 1
Const adTypeText = 2

''#  accept a string and convert it to Bytes array in the selected Charset
Function StringToBytes(Str,Charset)
  Dim Stream : Set Stream = Server.CreateObject("ADODB.Stream")
  Stream.Type = adTypeText
  Stream.Charset = Charset
  Stream.Open
  Stream.WriteText Str
  Stream.Flush
  Stream.Position = 0
  ''# rewind stream and read Bytes
  Stream.Type = adTypeBinary
  StringToBytes= Stream.Read
  Stream.Close
  Set Stream = Nothing
End Function

''# accept Bytes array and convert it to a string using the selected charset
Function BytesToString(Bytes, Charset)
  Dim Stream : Set Stream = Server.CreateObject("ADODB.Stream")
  Stream.Charset = Charset
  Stream.Type = adTypeBinary
  Stream.Open
  Stream.Write Bytes
  Stream.Flush
  Stream.Position = 0
  ''# rewind stream and read text
  Stream.Type = adTypeText
  BytesToString= Stream.ReadText
  Stream.Close
  Set Stream = Nothing
End Function
...