0

我有一个 Web 应用程序,它创建一些 HTML 作为字符串并将字符串作为文件上传到 Amazon S3。

在文件上传之前检查调试器中的字符串,我看到 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 字符串在浏览器中呈现正常,但我猜应该很明显。

我必须在传输特殊字符之前对其进行编码。我不能使用标准的 HttpUtility 来编码整个 HTML 字符串,因为所有的 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 回答