3

VB.NETを使用してUTF8文字列をISO-8859-1文字列に変換する必要があります。

例はありますか?


強調されたテキスト私はラテン語の関数を試しましたが、実行されません。間違った文字列を受け取りました。

私の場合、APIを使用してSMSを送信する必要があります。

今私はこのコードを持っています:

        baseurl = "http://www.myweb.com/api/sendsms.php"
        client = New WebClient
        client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
        client.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1")
        client.QueryString.Add("user", user)
        client.QueryString.Add("password", pass)
        client.QueryString.Add("alias", myAlias)
        client.QueryString.Add("dest",  mobile)
        textoSms = Me.mmTexto.Text
        textoSms = System.Web.HttpUtility.UrlEncode(textoSms)
        client.QueryString.Add("message", textoSms)
        data = client.OpenRead(baseurl)
        reader = New StreamReader(data)
        s = reader.ReadToEnd()
        data.Close()
        reader.Close()

しかし、実行されません...間違ったメッセージを受け取ります。例えば

私が書いた場合:mañanaはmaaanaを返します

私がaigüaを書くとaigaが返されます

4

5 に答える 5

8

どうですか:

Dim converted as Byte() = Encoding.Convert(utf8, Encoding.UTF8, _
                                           Encoding.GetEncoding(28591))

これは、「UTF8文字列」と言うときは、「テキストのUTF-8表現であるバイナリデータ」を意味することを前提としています。他の意味がある場合は、指定してください:)

ISO-8859-1は、完全なUnicodeのごく一部にすぎないことに注意してください。IIRC、あなたは「?」で終わるでしょう ISO-8859-1で使用できないソースデータの文字の場合。

于 2009-09-30T17:02:59.967 に答える
3

エンコーディングISO-8859-1は、より一般的にはLatin-1と呼ばれます。このエンコーディングを取得するには、次の手順を実行します

Dim latin1 = Text.Encoding.GetEncoding(&H6FAF)

完全な変換は、次の方法で実行できます。

Public Function ConvertUtf8ToLatin1(Dim bytes As Byte()) As Bytes()
  Dim latin1 = Text.Encoding.GetEncoding(&H6FAF)
  Return Encoding.Convert(Encoding.UTF8, latin1, bytes)
End Function

編集

ジョンが指摘したように、16進数の&H6FAFよりも10進数の28591を覚える方が簡単かもしれません。

于 2009-09-30T17:04:37.310 に答える
1

System.Text.Encoding.GetEncoding("ISO-8859-1")サポートされていないのñは私の推測ですが、その場合はSMS用に別のエンコーディングタイプを使用する必要があります。

絶対最小値を読んでくださいすべてのソフトウェア開発者は絶対に、積極的にUnicodeと文字セットについて知っている必要があります(言い訳はありません!)

于 2012-02-02T13:31:16.550 に答える
0

http://msdn.microsoft.com/en-us/library/system.text.encoding.convert.aspx

変数「input」をUTF-8文字列として使用してこれを試してください。

VB.NET:

Dim result As Byte() = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("iso-8859-1"), input);

C#:

byte[] result = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("iso-8859-1"), input);
于 2009-09-30T17:04:40.890 に答える
0

これをここに投稿する必要があるかどうかはわかりませんが、文字列がターゲットのエンコードタイプをサポートしているかどうかを確認するために、C#で小さな関数を作成しました。

それが何か助けになることを願っています...

/// <summary>
/// Function for checking if a string can support the target encoding type
/// </summary>
/// <param name="text">The text to check</param>
/// <param name="targetEncoding">The target encoding</param>
/// <returns>True if the encoding supports the string and false if it does not</returns>
public bool SupportsEncoding(string text, Encoding targetEncoding)
{
    var btext = Encoding.Unicode.GetBytes(text);
    var bencodedtext = Encoding.Convert(Encoding.Unicode, targetEncoding, btext);

    var checktext = targetEncoding.GetString(bencodedtext);
    return checktext == text;
}

//Call the function demo with ISO-8859-1/Latin-1
if (SupportsEncoding("some text...", Encoding.GetEncoding("ISO-8859-1")))
{
    //The encoding is supported
}
else
{
    //The encoding is not supported 
}
于 2012-02-06T09:55:45.730 に答える