2012-03-08 16 views
1

私のユーザーは、アラビア語の新聞のアラビア語テキストをテキストエリアにコピー&ペーストします。 私は、&#1500のような文字コードに関してアラビア語を格納できるようにしたいと思います。 ם等々。それ、どうやったら出来るの?アラビア語がばかげて表示される

私は次のスニペットを使用すると、間違った数字になってしまいます... まず、数字に変換する各文字は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で送信されていることを確認してください。受信ページと同じですか?今では、どの言語が使用されているにせよ、あなたは何のためにも心配する必要はありません。

関連する問題