C# Crystal报告导出到Word时连字符编码不正确

C# Crystal报告导出到Word时连字符编码不正确,c#,character-encoding,crystal-reports,C#,Character Encoding,Crystal Reports,生成的word文档(通过C#.net应用程序来自crystal reports引擎)有问题。最初连字符是可见的,但如果使用“仅保留文本”选项或“删除格式选项”复制和粘贴文本,则连字符将更改为空格“” 我很确定这是字符编码的问题,可能是用软连字符编码的。有没有办法通过crystal报告引擎解决这个问题 我已经检查并确认源文本是数据库中的实际连字符 常见的Ascii连字符,Unicode中的U+002D连字符-减号,似乎被转换为在Word中被视为不间断连字符的代码。一条评论说,在Word的“全部显示

生成的word文档(通过C#.net应用程序来自crystal reports引擎)有问题。最初连字符是可见的,但如果使用“仅保留文本”选项或“删除格式选项”复制和粘贴文本,则连字符将更改为空格“”

我很确定这是字符编码的问题,可能是用软连字符编码的。有没有办法通过crystal报告引擎解决这个问题


我已经检查并确认源文本是数据库中的实际连字符

常见的Ascii连字符,Unicode中的U+002D连字符-减号,似乎被转换为在Word中被视为不间断连字符的代码。一条评论说,在Word的“全部显示”模式下,它看起来像一个连字符,但更长。这意味着它看起来像一个短划线“–”。在内部,它是字节1E十六进制,因此我们可以说它是控制字符U+001E。但它不受AltX使用的影响。如果复制包含它的文本并将其粘贴为纯文本,它将被U+0020空格替换,因此它实际上被视为特殊代码,而不是字符

它与Unicode中的不间断连字符U+2011完全不同;相反,这是微软自己的想法,可以处理这样一种情况:您希望出现连字符,但不希望Word在连字符后将字符串分成两行(例如,在字符串“F-1”中,这样的中断看起来很可笑)

因此,您可以尝试在报告引擎中找到这种情况是如何发生的,并加以预防。但这可能比用bye 1E替换“-”更复杂

如果您需要在Word中处理此问题,可以使用“查找和替换”,其中“特殊字符”菜单包含“非中断连字符”。您可以将其替换为普通连字符“-”,从而失去不可破坏性


您也可以用不间断的连字符U+2011替换它,这样可以保留该属性。但如果转移到其他程序,或者由于字体问题(并非所有字体都包含该字符),这可能会导致问题。字体问题可能很棘手:Word会在需要时自动切换到另一种字体,并且不会通知您,因此您的文本可能包含不同字体的字符,这可能会导致多种问题(例如行距不均)。此外,当U+2011出现时,它可能看起来不同于常见的Ascii连字符;这或多或少是应该的。在排版方面,如果您使用U+2011,您的正常(断开)连字符应该是U+2010连字符。

您是否通过其Unicode编号或仅通过其外观确认了字符(在数据库中)的身份?常见的Ascii连字符,连字符-减号“-”U+002D看起来可能与连字符“‐”U+2010非常相似,甚至完全相同。为什么标题上写着“软连字符”?@JukkaK.Korpela sql中的数据实际上是unicode“002D”。这是我检查的第一件事。我甚至可以在文本框中键入unicode“002D”来运行报告,它在word中显示为非unicode连字符。它有软hypen,因为我认为这是这个问题的名称软连字符是U+00AD,Word将其显示为可见连字符(而不是实现其Unicode语义)。问题似乎是在生成Word文档时,U+002D如何(以及为什么)转换为一些非字符数据。Word在“Show All”(显示全部)模式下(您可以通过单击“¨”按钮或使用“Ctrl”输入)的情况是什么?@JukkaK.Korpela Show All继续显示连字符(虽然更长),当我点击alt+x时,它仍然不显示Unicode。