共享文本,即缺少<cr> </cr>

时间:2012-10-05 08:20:56

标签: c# windows-8 windows-runtime winrt-xaml

我正在使用“分享”通过电子邮件发送文字(字符串)。

我共享的数据是这样创建的:

string data = "Log Data\n" + "========\n";

data += "Log Type   : " + log.LogType.ToString() + "\n";

data += "Date/Time:   " + log.TimeStamp.ToString( "MM/dd/yy - HH:mm:ss" ) + "\n";

data += "Result:      " + log.Result.ToString() + "\n";

data += "Value1:      " + log.Value1 + "     Value2:      " + log.Value2 + "\n";

data += "Note:        " + log.Note + "\n\n";  

准备数据并通过电子邮件发送。但是,在我发送(通过Windows 8邮件程序)或接收方GMail之前,“\ n”未正确解释。

发送方显示的数据如下所示:

Log Data ======== Log Type : ToDo Date/Time: 06/05/12 - 08:00:00 Result: Normal Value1: 170 Value2: 0 Note: note 1 

ShareTextHandler是这样的:

DataRequest request = e.Request;

request.Data.Properties.Title = "Share Data: ";

request.Data.Properties.Description = "Send Data to an email address";

request.Data.SetText( data );

Windows 8中的“\ n”是否已更改?或者SetText会做些什么来删除它?

EitanB

...更新

您好,

尝试使用HTML:

使用HTML尝试一些测试数据,如下所示:         私有字符串PrepareShareData()             {             string CR = System.Environment.NewLine;             string data = string.Empty;

        data += "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Final//EN\">" + CR;
        data += "<html>" + CR;
        data += "<body>" + CR;
        data += "<p>" + CR;
        data += "Log Data" + "<br/>" + CR;
        data += "========" + "<br/>" + CR;
        data += "Line 1" + "<br/>" + CR;
        data += "Line 2" + "<br/>" + CR;
        data += "<p>" + CR;
        data += "</body>" + CR;
        data += "</html>" + CR;

        return data;
        }

没用......

也试过:

    private string PrepareShareData()
        {
        string CR = System.Environment.NewLine;
        string data = string.Empty;

        data += "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Final//EN\">";
        data += "<html>";
        data += "<body>";
        data += "<p>";
        data += "Log Data" + "<br/>";
        data += "========" + "<br/>";
        data += "Line 1" + "<br/>";
        data += "Line 2" + "<br/>";
        data += "<p>";
        data += "</body>";
        data += "</html>";

        return data;
        }

也不起作用....

我确实使用记事本创建了一个.HTML文件,工作正常:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">
<html>
<body>
<p>
Log Data<br/>
========<br/>
Line 1<br/>
Line 2<br/>
</p>
</body>
</html>

是否存在HTML邮件问题或我的HTML错误?

谢谢, EitanB

4 个答案:

答案 0 :(得分:1)

用于:

var htmlFormat = Windows.ApplicationModel.DataTransfer.HtmlFormatHelper.CreateHtmlFormat( data );
request.Data.SetHtmlFormat( htmlFormat );

数据是:

        string data = string.Empty;
        string BR = @"<br/>";
        data += @"<html>";
        data += @"<head><title>";
        data += @"<title>";
        data += @"Log Data<br/>";
        data += @"========<br/>";
        data += @"</title>";
        data += @"</head>";
        data += @"<body>";
        data += @"Date/Time:   " + log.TimeStamp.ToString( "MM/dd/yy - HH:mm:ss" ) + BR;
        data += @"Note:        " + log.Note + BR + BR;
        data += @"</body>";
        data += @"</html>";

解决微软问题需要做太多工作....

EitanB

答案 1 :(得分:1)

尝试args.Request.Data.SetHtmlFormat(HtmlFormatHelper.CreateHtmlFormat(html));

答案 2 :(得分:0)

环境。新线肯定是朝着正确方向迈出的一步,但我不知道它是否会解决你的问题。

这是Consumer Preview中内置邮件应用程序中的一个问题(我还没有检查它是否在RTM中修复)。我注意到它似乎不想尊重换行符。我确认通过编写一个小的虚拟共享目标并确保正确呈现文本来发送正确的数据。也许你可以在共​​享请求中发送HTML - 邮件支持HTML和Text。

答案 3 :(得分:0)

首先作为一般经验法则,我们应该始终使用StringBuilder对象将字符串附加到一起。原因是:字符串变量是不可变的,所以每次我们添加一个“+”符号时,我们实际上最终会创建一个全新的字符串变量实例。

string data = string.Empty;
data += "Some Text Creates 1 variable";
data += "This creates a second variable" + "and this a third";
return data;

更适合作为

StringBuilder builder = new StringBuilder()

builder.Append("Some Text Creates 1 variable");
builder.Append("Since we havent yet created a string no 2nd variable is created");
builder.AppendLine("Should create a return before this line");
builder.AppendLine(Environment.NewLine);
builder.AppendLine("Should have an empty line above it");
return builder.ToString();
// only creates 1 string variable

或者您可以在描述的HTML Encode方法中包装单个变量

return System.Net.WebUtillity.UrlEncode(builder.ToString());