解释:看起来不间断空格字符已写入纯文本字段(类型 VARCHAR 或 CHAR)。您的数据库的默认编码是拉丁语 1,但 SlashDB 配置为使用 utf-8 编解码器将该字符串解码为 Unicode。这是行不通的,因为这个字符的 utf-8 编码实际上是两个字节:C2 A0,而拉丁语 1 只有一个字节 A0。
In [38]: u'\xa0'.encode('utf-8')
Out[38]: '\xc2\xa0'
In [39]: u'\xa0'.encode('latin-1')
Out[39]: '\xa0'
In [40]: print '\xa0'.decode('latin-1')
In [41]: print '\xa0'.decode('utf-8')
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-41-018a073d68b8> in <module>()
----> 1 print '\xa0'.decode('utf-8')
D:\Victor\Anaconda2\lib\encodings\utf_8.pyc in decode(input, errors)
14
15 def decode(input, errors='strict'):
---> 16 return codecs.utf_8_decode(input, errors, True)
17
18 class IncrementalEncoder(codecs.IncrementalEncoder):
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 0: invalid start byte
修复:您应该在 SlashDB 的配置中匹配数据库的编码。为此,请在 Configure -> Databases 下编辑您的数据库连接,并将字符编码更改为“latin-1”。然后循环连接。
建议:对于在常规 7 位 ASCII 之外可以预期国际字符或不可打印控制代码的字段,您可能需要考虑在数据库表中使用 Unicode 数据类型,例如 NCHAR 和 NVARCHAR。这些不需要解码,因为数据库驱动程序会将它们作为 Unicode 发送到 SlashDB。