我正在尝试将unicode字符串输出为RTF格式.(使用c#和winforms)
如果需要Unicode转义,则使用控制字\ u,然后使用16位带符号十进制整数,给出Unicode代码点编号.为了没有Unicode支持的程序的好处,必须在指定的代码页中跟随此字符的最近表示.例如,\ u1576?会给出阿拉伯字母beh,指明没有Unicode支持的旧程序应该将其作为问号呈现.
我不知道如何将Unicode字符转换为Unicode代码点("\ u1576").转换为UTF 8,UTF 16和类似很容易,但我不知道如何转换为codepoint.
我使用它的场景:
当Unicode字符到达时出现问题
题
如何将字符串"Européen"转换为RTF格式的字符串"Europ \'e9en"?
[TestMethod]
public void Convert_A_Word_To_Rtf()
{
// Arrange
string word = "Européen";
string expected = "Europ\'e9en";
string actual = string.Empty;
// Act
// actual = ... // How?
// Assert
Assert.AreEqual(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我发现了什么
RichTextBox的
RichTextBox可用于某些事情.例:
RichTextBox richTextBox = new RichTextBox();
richTextBox.Text = "Européen";
string rtfFormattedString = richTextBox.Rtf;
Run Code Online (Sandbox Code Playgroud)
但是rtfFormattedString原来是整个RTF格式的文档,而不仅仅是字符串"Europ \'e9en".
堆栈溢出
谷歌
我还在网上找到了一堆其他资源,但没有解决我的问题.
回答
不得不添加Trim()删除前面的空格result.除此之外,Brad Christie的解决方案似乎也有效.
我现在将使用这个解决方案,即使我有一个糟糕的直觉,因为我们必须使用SubString并修剪RichTextBox以获得RTF格式的字符串.
测试用例:
[TestMethod]
public void Test_To_Verify_Brad_Christies_Stackoverflow_Answer()
{
Assert.AreEqual(@"Europ\'e9en", "Européen".ConvertToRtf());
Assert.AreEqual(@"d\'e9finitif", "définitif".ConvertToRtf());
Assert.AreEqual(@"\'e0", …Run Code Online (Sandbox Code Playgroud)