我正在尝试替换ä
,ü
或ß
等德语和荷兰语的变音符号。它们应该写成ae
而不是ä
。所以我不能简单地将一个字符翻译成另一个字符。
有更优雅的方式吗?实际上它看起来像(尚未完成):
SELECT addr, REPLACE (REPLACE(addr, 'ü','ue'),'ß','ss') FROM search;
在尝试不同命令的过程中,我遇到了另一个问题:
当我搜索Ü
时,我得到了这个:
错误:编码的字节序列无效" UTF8":0xdc27
用U&'\0220'
尝试过它,它没有取代任何东西。只有使用ü
(小写ü
)才能正确替换它。必须用unicode做点什么,但是如何解决这个问题?
来自德国的亲切问候。 :)
答案 0 :(得分:3)
您的服务器编码似乎是UTF8
我怀疑您的 client_encoding
不匹配,这可能会让您对所处理的内容产生错误的印象。检查:
SHOW client_encoding; -- in your actual session
阅读相关答案:
Can not insert German characters in Postgres
Replace unicode characters in PostgreSQL
工具链的其余部分也必须同步。例如,当使用puTTY时,必须确保终端同意其余部分:Change settings... Window -> Translation -> Remote character set
= UTF-8
。
至于你的第一个问题,你已经有了最好的解决方案。一些变音符号最好用一串replace()
语句替换。
正如您似乎已经知道的那样,单个字符替换对于(单个)translate()
语句更有效。
相关:
答案 1 :(得分:0)
除了其他原因,我决定在python中编写替换。就像Erwin之前写的那样,似乎没有比组合replace
- 命令更好的解决方案。
一般来说非常简单,即使没有编码也必须使用。我和#34;决赛"解决方案现在看起来像这样:
ger_UE="Ü"
ger_AE="Ä"
ger_OE="Ö"
ger_SS="ß"
dk_AA="Å"
dk_OE="Ø"
dk_AE="Æ"
cur.execute("""Select addr, REPLACE (REPLACE (REPLACE( REPLACE (REPLACE (REPLACE (REPLACE(addr, '%s','UE'),'%s','OE'),'%s','AE'),'%s','SS'),'%s','AA'),'%s','OE'),'%s','AE')
from search WHERE x = '1';"""%(ger_UE,ger_OE,ger_AE,ger_SS,dk_AA,dk_OE,dk_AE))
我现在期待它撞到大桌子时的速度。如果有人想做一些注释,我们非常欢迎。
感谢您的回复和亲切的问候。