2012-03-08 3 views
1

내 사용자는 아랍어 신문의 텍스트를 복사하여 텍스트 영역에 붙여 넣습니다. 아랍어를 & # 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! 
+0

'Asc'대신 'AscW'를 사용해 보셨습니까? – AnthonyWJones

답변

0

글쎄, 나는 분류했다. 아래에 배치 한 Arabize 함수를 사용하십시오.

''# 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 
+0

'y = BytesToString (StringToBytes (x, "Windows-1256"), "Windows-1256")''x '가'y'와 동일하지 않은 이유는 무엇입니까? 만약 그들이 동일하다면 왜 단순히하지 않는거야 :'response.write Server.HtmlEncode (Request.Form ("IncomingArabic"))'? – AnthonyWJones

+0

이상한 일이 일어났습니다. 다음날, 횡설수설이 다시 돌아왔다. 나는 everyhting (당신의 제안도 포함해서)을 시도했다. 그 다음 나는 cuplrit가 어디에 있는지 찾기 위해 코드를 자르기 시작했다. 그리고 그것이 가장 적게 예상되는 장소에 있었던 원인을 발견했을 때 그것은 나를 충격을 주었다. utf-8을 설정하는 메타 태그를 제거하면 문제가 사라졌습니다! 믿을 수 없는. 이제는 완전히 작동합니다. 현재의 해결책은 HTML 헤더에 UTF-8이 없으며 ASP 페이지에서 코드 페이지와 문자 세트를 설정하지 않아도 될만큼 간단합니다. 도대체 utf-8이 2 일간의 혼란의 원인으로 밝혀진 것은? 그건 내가 모른다. –

+0

아마도이 질문에 대한 내 대답 : http://stackoverflow.com/questions/916118/classic-asp-how-to-convert-string-to-utf8-to-usc2 몇 가지 통찰력을 제공 할 수 있습니다. – AnthonyWJones

1

나는 여기에있다. UTF-8을 사용하도록 모든 것을 전환하십시오. 양식을 게시하는 페이지가 Response.CharSet = "UTF-8"Response.CodePage = 65001과 함께 전송되는지 확인하십시오. 수신 페이지와 동일합니까? 이제는 어떤 언어가 사용되고 있더라도 상관하지 마십시오.