【问题标题】:Save text with emoji to file become '?'将带有表情符号的文本保存到文件中成为“?”
【发布时间】:2018-06-18 16:31:36
【问题描述】:

我必须做什么

我必须创建一个文本文件 (.txt, .doc, ...),其中包含由 .netWebaApi 传递的确切文本(使用表情符号)(并将其附加到电子邮件中)。

情况:

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

我不知道如何正确保存表情符号。如果我将表情符号复制粘贴到单词或记事本文件中,它可以工作,但如果我通过我的代码保存它,它不会。我想这是由于格式化,但我尝试了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 附件,但附件不包含表情符号

【问题讨论】:

  • 您是如何生成.doc 文件的?
  • @john 我没有将其保存到文件中,我只是使用上面的代码创建一个带有给定文本和contenttype = application/ms-word的附件
  • 那么您是在内存中生成文本文件,而不是 Word 文档?
  • 如果您要创建文本文件,您的内容类型应为“text/plain”,文件扩展名为“.txt”。
  • 您不能只保存一个文本字符串并称其为 Word 文件。

标签: c# text emoji


【解决方案1】:

您的smsText 包含一个明文字符串。您不能只将该字符串写入流或文件中,然后调用 Word 文件*

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

参见例如Free library to MS Word

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

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

【讨论】:

  • +1 用于建议 Word 库。但我只想补充一点,如果您不关心旧的.doc 格式并且可以使用新的.docx 格式,您可能想要搜索Open XML 库。 DocX 是我过去使用过的一个很棒的库。
  • 非常感谢!我用你的第一行+约翰的评论解决了。如果可能,要完成答案,请添加他的评论以指定如何处理 .txt 格式。再次感谢
  • @Pier 我不明白你的意思。你的意思是你可以写一个纯文本的 .txt 文件来代替它吗?
  • @CodeCaster 我想它可能一直在使用UTF8 而不是Unicode
  • @CodeCaster 是的,如果我不清楚,对不起。我想说的是,我可以在没有偏好的情况下同时创建 .txt.doc/.docx 附件。如果我使用 .txt 格式和 UTF8 编码格式的纯文本,它可以工作。
猜你喜欢
  • 1970-01-01
  • 2012-01-19
  • 2021-04-09
  • 2019-12-18
  • 2020-11-25
  • 1970-01-01
  • 2021-09-02
  • 2020-03-15
  • 2013-02-19
相关资源
最近更新 更多