python - 为什么字符串对象的 IronPython str() 会引发 UnicodeEncodeError?

标签 python python-2.7 unicode encoding ironpython

我们的网络应用程序使用定制的 IronPython 脚本(IronPython 版本为 2.7.3)

脚本中的对象在某个时刻被转换为字符串。这绝对是一个字符串。它由我们的应用程序提供,其值(value)来自外部系统。 引发异常的行是:

return str(customField.Value)

其中 customField.Value 是我一直在描述的对象(customField.Value 是对象类型)。

该对象是一个字符串,因为 customField 是文本类型(我们应用程序的类型),我可以提取它的值,它看起来像标准英文字符串,并且没有 ASCII 之外的字符范围。

记录的异常(经过我们的记录器处理后)是:

Error on uploading case data: ('unknown', '\x00', 0, 1, '')
['Equals', 'GetHashCode', 'GetType', 'InitializeFromClr', 'Item', 'MemberwiseClone',
 'ReferenceEquals', 'ToString', '__class__', '__delattr__', '__dict__', '__doc__',
 '__format__', '__getattribute__', '__getitem__', '__getslice__', '__hash__', '__init__',
 '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__',
 '__sizeof__', '__str__', '__subclasshook__', '__unicode__', 'args', 'clsException',
 'encoding', 'end', 'message', 'object', 'reason', 'start']
message: --- ---
args: --- ('unknown', '\x00', 0, 1, '') ---
CLR Exception: --- System.Text.EncoderFallbackException ---
Error located in on line 531 in function 
Error located in on line 410 in function packData...

为什么会发生这种情况? 我应该如何解决此异常,以及修改脚本的正确方法是什么?

最佳答案

已解决: str() 应用于作为 unicode 字符串的 str 对象,其中字符超出了 ascii 范围,抛出所描述的异常

我的一个解决方案是使用以下方法代替 str():

def safeStringConversion(obj):
    if isinstance(obj, str):
        return obj
    else:
        return str(obj)

这样,unicode 字符串就以保留的形式通过应用程序传递了

关于python - 为什么字符串对象的 IronPython str() 会引发 UnicodeEncodeError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31223446/

相关文章:

Java 按代码点 (UTF-32) 顺序对字符串进行排序

python - 删除所有 <a> 标签

python - 在列表中找到第 n 个最小的数字?

python - 如何将 collections.Counter 对象写入 python 中的文件,然后从文件中重新加载它并将其用作计数器对象

python - 如何使用 Tornado 实现时间线(实时 - 就像 Twitter 的)?

python - Unicode和Unicodedata模块之间有什么区别?

android - 某些 unicode 字符不会在某些设备上呈现

python - 将 Caffe CNN 转换为特征提取器

python - Google 应用引擎字符串到实体

python - 在 cherrypy 中启动 celery 任务