1

我们正在接收不同编码格式的数据,目前我们正在使用下面提到的 java 编码 https://docs.oracle.com/javase/1.5.0/docs/guide/intl/encoding.doc.html

我们正在转向 python,因此将这种编码逻辑更改为 python。由于python不支持中文字符编码,相当于java编码Cp935,我们使用javabridge代码如下

 `
class String:
    new_fn = javabridge.make_new("java/lang/String", "([BLjava/lang/String;)V")
    def __init__(self, i, s):
        self.new_fn(i, s)
    toString = javabridge.make_method("toString", "()Ljava/lang/String;", "Retrieve the string value")    

array = numpy.array(list(fielddata) , numpy.uint16)
                            strobject = String(array,encoding)
                            convertedstr = strobject.toString()  `

但是我们得到了错误


“utf-8”编解码器无法解码位置 0 中的字节 0xc0:起始字节无效


在 python 中寻找帮助或替代方法。

4

1 回答 1

0
class JavaEncoder:
        # creating new method for java bridge
        new_fn = javabridge.make_new("java/lang/String", "([BLjava/lang/String;)V")

        def __init__(self, i, s):

            i[i == 0] = 64
            self.new_fn(i, s)

        # creating toString method of JAVA
        toString = javabridge.make_method("toString", "()Ljava/lang/String;", "Retrieve the integer value")

使用 JAVABRIDGE 转换数据时,如果字段的大小为 1 并且数据包含 00,则 numpy.uint8 将其转换为 0,将其视为整数,因此,在转换数据时,我们遇到编码错误以避免这种情况,我们在上面添加的代码 64 是空格(40 EBCDIC/20 ASCII 空间)在 uint8 中。

于 2018-06-15T07:08:42.330 回答