使用 Python 读取 RTF 文件时出现欧元符号问题

2023-12-05

我需要使用 Python 和 pyRTF 生成 RTF 文档,一切正常:我对重音字母没有问题,它甚至接受欧元符号而没有错误,但不是,我得到这个标志:¤。 我用这种方式对字符串进行编码:

x.encode("iso-8859-15")

我用谷歌搜索了很多,但我无法解决这个问题,我需要做什么才能获得欧元符号?


RTF 标准使用 UTF-16,但其形状适合 RTF 命令序列格式。记录于http://en.wikipedia.org/wiki/Rich_Text_Format#Character_encoding。不幸的是,pyRTF 不会为你做任何编码;处理这个问题已经在项目的 TODO 中了,但显然他们在放弃库之前从未做到这一点。

这是基于我最近在一个项目中使用的代码。我现在已经将其发布为rtfunicode on PyPI,支持 Python 2 和 3; python 2版本:

import codecs
import re

_charescape = re.compile(u'([\x00-\x1f\\\\{}\x80-\uffff])')
def _replace(match):
    codepoint = ord(match.group(1))
    # Convert codepoint into a signed integer, insert into escape sequence
    return '\\u%s?' % (codepoint if codepoint < 32768 else codepoint - 65536)    


def rtfunicode_encode(text, errors):
    # Encode to RTF \uDDDDD? signed 16 integers and replacement char
    return _charescape.sub(_replace, escaped).encode('ascii')


class Codec(codecs.Codec):
    def encode(self, input, errors='strict'):
        return rtfunicode_encode(input, errors), len(input)


class IncrementalEncoder(codecs.IncrementalEncoder):
    def encode(self, input, final=False):
        return rtfunicode_encode(input, self.errors)


class StreamWriter(Codec, codecs.StreamWriter):
    pass


def rtfunicode(name):
    if name == 'rtfunicode':
        return codecs.CodecInfo(
            name='rtfunicode',
            encode=Codec().encode,
            decode=Codec().decode,
            incrementalencoder=IncrementalEncoder,
            streamwriter=StreamWriter,
        )

codecs.register(rtfunicode)

您可以编码为“rtfunicode”,而不是编码为“iso-8859-15”:

>>> u'\u20AC'.encode('rtfunicode') # EURO currency symbol
'\\u8364?'

以这种方式对插入 RTF 文档中的任何文本进行编码。

请注意,它仅支持 UCS-2 unicode (\uxxxx,2字节),不是UCS-4(\Uxxxxxxxx, 4字节);rtfunicode1.1 通过简单地将 UTF-16 代理对编码为两个来支持这些\uDDDDD?有符号整数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 读取 RTF 文件时出现欧元符号问题 的相关文章

随机推荐

  • 不重新借用可变切片时,for 循环中发生移动错误

    我试图将可变切片传递给函数并在其中的多个循环中使用它 function1产生错误 更改为function2 or function3使错误消失 但我不明白之间的区别function1 and function2 v and mut v看起来
  • 在 Scala 中迭代 Java 集合

    我正在编写一些 Scala 代码 它使用阿帕奇兴趣点API 我想迭代包含在java util Iterator我从 Sheet 类中得到的 我想在 a 中使用迭代器for eachstyle 循环 所以我一直在尝试将其转换为原生 Scala
  • NSDateFormatter 混淆

    我正在尝试使用 NSDateFormatter 中的 dateFromString 方法 但它不知何故对我不起作用 我做了一个测试用例来展示我的问题 NSDateFormatter dateFormatter NSDateFormatter
  • Soap 抛出 java.io.IOException:HTTP 请求失败,HTTP 状态:500

    实际上我用这个代码来访问这个网络服务华氏度到摄氏度方法 我得到了正确的响应 但是当我尝试访问我的网络服务时得到 java io IOException HTTP 请求失败 HTTP 状态 500 错误 它指向transport call S
  • 在 Chrome 打包应用中通过 XHR 加载本地内容

    我正在尝试加载使用 Backbone 构建的 Web 应用程序 它会提取本地存储的 JSON 和 HTML 模板文件 我想知道 Chrome 打包应用程序是否可以通过使用某种 get ajax 请求来加载这些文件 目前我得到这个 OPTIO
  • 如何在vue js组合api中将反应变量从子组件传递到父组件

    我有两个组件 一个是父组件 另一个是子组件 父组件有一个表单字段 在这个表单字段中我可以添加其他表单字段 这个附加表单字段是在组件 表单字段 的帮助下添加的父组件中有自己的反应变量 附加组件也有自己的反应变量 因此当我要提交时 我需要捕获子
  • 如何在 MySQL 中保持列的值唯一?

    我在 Perl 中进行文件解析并插入到 MySQL 数据库的表中 例如 我有以下字段 S No PCID USERNAME TIME INFORMATION 1 203 JANE 22 08 updation 2 203 JANE 22 0
  • 类型类泛型中的类型类约束

    在过去一周左右的时间里 我一直致力于 Scala 的类型化 索引数组特征 我想将特征作为类型类提供 并允许库用户按照他们喜欢的方式实现它 这是一个示例 使用列表的列表来实现二维数组类型类 crate a 2d Array typeclass
  • PHP 中的嵌套类或内部类

    我正在建造一个用户等级对于我的新网站 然而这次我想以稍微不同的方式构建它 C Java乃至Ruby 可能还有其他编程语言 允许在主类中使用嵌套 内部类 这使我们能够使代码更加面向对象和有组织 在 PHP 中 我想做这样的事情 这在 PHP
  • 如何使用 iText 7 添加页眉和页脚到 PDF

    使用 iTextSharp 您可以通过将事件附加到 PDF 来将页眉 页脚添加到 PDF 如以下 SO 答案中所述 https stackoverflow com a 19004392 我怎样才能用 iText 7 做同样的事情 这个链接有
  • 子域会话在有/没有自定义域的 Heroku 上的 Rails 2.3 和 Rails 3 中无法工作?

    所以我有两个 Heroku 应用程序 http 生产应用程序 com 映射自http product app heroku com http development app heroku com On production app com
  • 有没有办法让类使用 sphinx 继承其超类的文档?

    假设我有一堂课 class A object def myfunction A pass 和一个子类 class B A def myfunction pass 是否可以使用sphinx从A myfunction继承B myfunction
  • Kotlin 错误:找不到 org.jetbrains.kotlin:kotlin-stdlib-jre7:1.0.7

    我将 Kotlin 插件安装到我的应用程序中 v v1 1 1 release Studio2 2 1 然后选择 在项目中配置 Kotlin 我选择了 1 0 7 的编译器和运行时版本 Kotlin 更新了我的 Gradle 文件 现在 当
  • gradle 设置:com.google.android.gms.internal.zzbgl 未找到

    我读过类似的问答here and here关于这个问题 所有解决方案都是使用最新的插件 这个问题已经过时了 我需要再次使用最新版本进行新配置 我已经检查了插件兼容性 并且当我发布此问题时所有版本都是最新的 但尚未成功 错误 无法访问 zzb
  • 了解别名模板

    我问了一个question其中有几个对代码的引用 template
  • 如何处理 MongoDB 中的过时连接

    在 Mongo 中自动刷新过时连接的最佳方法是什么 回收 mongod 服务后 我从 Liferay Portlet 中得到此异常 com mongodb MongoException Network can t call somethin
  • Python for-in 循环前面有一个变量[重复]

    这个问题在这里已经有答案了 我看到一些代码 例如 foo x for x in bar if x occupants gt 1 这是什么意思 它是如何工作的 目前的答案都很好 但不要谈论它们只是如何句法糖我们已经习惯了某种模式 让我们从一个
  • 打印给定月份/年份的日历

    我正在做一个 Java 作业 它涉及在用户指定月份和年份后打印日历 我无法使用 Calendar 或 GregorianCalendar 类 我的问题是日历无法正确打印月份的第一天是星期六 我已经查看了我的代码大约一个小时了 我不确定出了什
  • TLS 1.2 在 cURL 中不起作用

    我在卷曲使用 TLS1 2 的 HTTPS url 时遇到问题 在卷曲操作中 我将登录数据发布到网站并将其保存在 cookiefile 中 我收到的错误消息是这样的 error 14077438 SSL routines SSL23 GET
  • 使用 Python 读取 RTF 文件时出现欧元符号问题

    我需要使用 Python 和 pyRTF 生成 RTF 文档 一切正常 我对重音字母没有问题 它甚至接受欧元符号而没有错误 但不是 我得到这个标志 我用这种方式对字符串进行编码 x encode iso 8859 15 我用谷歌搜索了很多