来自 sql alchemy 的重音是 'â\x80\x99s'

问题描述 投票:0回答:2

我正在使用 sqlalchemy 读取 SQL

q = """select * from table_name"""
data = pd.read_sql_query(q,con)

当我在屏幕上查看结果时,看起来一切正常

enter image description here

但是当我将它分配给一个变量并写回sql时,它看起来很奇怪

string_oi = data.iloc[0,8]
df = pd.DataFrame({'test':[string_oi]})
df.to_sql(
    name= 'tableTest',
    con = con,
    if_exists='replace',
    index = False
)
con.commit()    

enter image description here

当我直接定义字符串时,它会正确地转到SQL

string_oi = 'Tylerâs way'

enter image description here

检查从sql读取时的字符串,重音编码为

â\x80\x99
,即

'Tylerâ\x80\x99s way'

如何保存/转换它以便正确读取字符串,然后保存回 SQL 时就可以了?据推测,在读取 SQL 表时,其他特殊字符也会发生这种情况,我想一步解决这个问题

python sql-server pandas sqlalchemy pyodbc
2个回答
0
投票

根据https://www.ee.ucl.ac.uk/~mflanaga/java/HTMLandASCIItableC1.html

\x80
\x99
是控制字符,不可打印。

使用

[i.replace('\x80','').replace('\x99','') for i in data.column]

可以删除,并且写回 SQL 时没有问题

enter image description here


0
投票

这是Mojibake的经典案例。

在创建

data
DataFrame 的源中,原始文本不是
"Tylerâs way"
,而是
"Tyler’s way"
,其中撇号字符是右单引号 (U+2019)。该字符采用 UTF-8 编码为
\xe2\x80\x99
,创建
data
DataFrame 的过程通过将 UTF-8 字节解码为 latin1,将其损坏为
Tylerâ\x80\x99s way

>>> "Tyler’s way".encode("utf-8")
b'Tyler\xe2\x80\x99s way'
>>> "Tyler’s way".encode("utf-8").decode("latin1")
'Tylerâ\x80\x99s way'

最好的解决方案是修复创建

data
DataFrame 的过程,以便它正确处理 Unicode 文本。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.