使用表情符号将文本保存到文件变为“?”

时间:2018-06-18 07:52:38

标签: c# text emoji

我必须做什么

我必须创建一个文本文件(.txt, .doc, ...),其中包含.net WebaApi传递的确切文本(因此使用emojis)(并将其附加到电子邮件中)。

情况:

我有一个.net webapi的项目。我的一条路线包括创建文本文件并将其附加到电子邮件,其中一些文本由可能包含emojis的设备传递

我无法弄清楚如何正确保存表情符号。如果我将表情符号复制粘贴到单词或记事本文件中它可以工作,但如果我通过我的代码保存它不会。我想这是由于格式化,但我尝试了Unicode, UTF-32, UTF-8, ASCII,...

我在SO上尝试了很多解决方案,但没有一个能为我工作。

例如这个表情符号(从.net调试器复制粘贴) - >根据使用的编码转换为引号或¶ó

如何将表情符号作为文本保存到文件中,以便接收者可以读取它们?

这就是我所做的:

//smsText is a string containing emojis
byte[] bytes = Encoding.Unicode.GetBytes(smsText);
Attachment attachment = new Attachment(new MemoryStream(bytes), tokenKey + ".doc");
attachment.ContentType = new ContentType("application/ms-word");
List <Attachment> attachments = new List<Attachment>();
attachments.Add(attachment);
//send email with attachments

请注意,带调试器的smsText包含正确显示的内容。

电子邮件使用.doc附件正确到达接收方,但附件中不包含表情符号

1 个答案:

答案 0 :(得分:3)

您的smsText包含明文字符串。您不能将该字符串写入流或文件中,然后将其称为Word文件 *

Word文件是具有特定格式的二进制文件。您需要使用可以编写此格式的库,或使用Interop与现有Word安装进行互操作。

请参阅示例Free library to MS Word

如果您对明文文件很好,只需将文本的字节写入流并传播适当的编码(在本例中为Unicode,在.NET上为UTF-16)。

* :是的,就像Excel尽力将HTML表格格式化为Excel文档一样,但你不应该这样做。