有没有办法强制UWP RichEditBox在用户输入时只使用UTF编码?

时间:2017-10-21 18:58:29

标签: html encoding uwp richtextbox rtf

我正在尝试将UWP RichEditBox的内容转换为HTML。

为此,我尝试使用RtfPipe库(https://github.com/erdomke/RtfPipe)。从它的外观来看,这个库在UWP上存在问题,因为并非所有编码都在该目标框架上定义。 (如果你感兴趣的话,这是你得到的错误:Encoding.GetEncoding can't work in UWP app,但是接受的答案似乎不是所有平台上的最佳选择 - 我甚至没有设法使建议的修复编译,所以它可能不再有效了)

现在,作为一种避免这种情况发生的方法,我想知道是否有办法强制控件在用户键入文本时始终使用UWP定义的UTF变体之一来编码数据。 因为,现在,当我输入它时,我会得到类似的东西:

{\rtf1\fbidis\ansi\ansicpg1253\deff0\nouicompat\deflang1032{
....
\pard\tx720\cf1\f0\fs23\lang1033

...使图书馆抛出异常。

我想,如果我设法让它不使用ASCII代码页,事情会很棒。 在看了控制属性之后,我看不到我可以使用的东西。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

  

如果您感兴趣,这是您得到的错误:Encoding.GetEncoding无法在UWP应用中使用

正如您所描述的,将此包与UWP应用程序一起使用时会引发内部错误。 System.ArgumentException: 'Windows-1252' is not a supported encoding name,通过我的身边测试,public static readonly Encoding AnsiEncoding = Encoding.GetEncoding("Windows-1252");时代码行UpdateEncoding抛出Windows-1252

根据错误详情,UWP似乎不支持public static readonly Encoding AnsiEncoding = Encoding.UTF8; ,另请参阅RtfSpec.cs。您可以根据需要使用UTF,例如,对库进行更改,然后它将起作用(测试演示this similar thread)。

UWP
  

我甚至没有设法建议修复编译,所以它可能不再有效

here方法应该有用,但它只支持.NET Framework 4.6Portable Class Library,它不支持RtfPipe。您提到的Portable Class Library库是Encoding.RegisterProvider,因此您无法使用Portable Class LibraryEncoding.RegisterProvider方法支持catch,详细信息请查看两个类别的版本信息。

  

我想,如果我设法让它不使用ASCII代码页

Encoding.GetEncoding本身使用ANSI,PC-8,Macintosh或IBM PC字符集来控制文档的表示和格式,您可能无法更改它。考虑更新库以解析UWP的RTF