0

HTMLを文字列として作成し、文字列をファイルとしてAmazonS3にアップロードするWebアプリがあります。

ファイルがアップロードされる直前にデバッガーで文字列をチェックすると、HTMLは正常に見えますが、バケット内のファイルをチェックすると、一部の文字が変更されていることがわかります。特定のキャラクターにのみ発生します。例えば:

Android™のGOタイムです!

になります

それはAndroidでのGO時間です。

これは私が使用する正確なコードです:

using (var client = AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey, s3Config))
        {
            var request = new PutObjectRequest()
                .WithBucketName(bucketName)
                .WithKey(fileKey)
                .WithMetaData("title", title);
            request.ContentBody = body;
            S3Response response = client.PutObject(request);
            response.Dispose();
        }

.WithContentBody(body)を試しましたが、request.ContentBody=body;に変更しました。それが魔法のように機能するかどうかを確認しますが、明らかに機能しませんでした。

body変数はHTML文字列です。デバッガーで表示すると、文字は正しく表示されます。また、本文の値にVisual Studio HTMLビューアを使用すると、問題なく表示されます。

私がここで間違っている可能性があることについて何か考えはありますか?設定が足りませんか?私のウェブ検索でこの問題を抱えている他の体を見つけることができないようです。

4

1 に答える 1

0

ついにこれを理解した。デバッガーにあるHTML文字列がブラウザーで正常にレンダリングされていたため、すぐにはわかりませんでしたが、それは明らかだったと思います。

特殊文字を転送する前にエンコードする必要があります。すべてのHTMLタグがエンコードされるため、標準のHttpUtilityを使用してHTML文字列全体をエンコードすることはできませんでした。

私はこの方法を使用しました:

private static string HtmlEncodeSpecialChars(string html)
    {
        var sb = new StringBuilder();
        foreach (var c in html)
        {
            if (c > 127) // special chars
                sb.Append(String.Format("&#{0};", (int)c));
            else
                sb.Append(c);
        }
        return sb.ToString();
    }

ここで見ました。

これまでのところ、トリックを行っているようです。

于 2012-09-13T15:20:41.103 に答える