我正试图取代德国和荷兰的货币,如ä、ü或ß。它们应该像ae那样编写,而不是ä。所以我不能简单地把一个字符翻译成另一个字符。
有什么更优雅的方法吗?实际上,它看起来像是(尚未完成):
SELECT addr, REPLACE (REPLACE(addr, 'ü','ue'),'ß','ss') FROM search;在我尝试不同命令的过程中,我遇到了另一个问题:
当我搜索Ü时,我得到了这样的信息:
错误:编码"UTF8":0xdc 27的无效字节序列
它和U&'\0220'试过了,但并没有取代任何东西。只有使用ü (对于小写ü)才能正确地替换它。必须用unicode做点什么,但是如何解决这个问题呢?
来自德国的亲切问候。:)
发布于 2014-07-10 13:16:56
您的服务器编码似乎是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()语句替换几个umlauts。
正如您似乎已经知道的那样,使用(单个) translate()语句来替换单个字符更有效。
相关信息:
发布于 2014-07-11 13:07:27
除了其他原因,我决定用python来代替。正如Erwin之前所写的,似乎没有比组合replace命令更好的解决方案了。
一般来说,很简单,甚至连编码都不用benn用。我的“最后”解决方案现在如下所示:
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))我现在期待着它撞到大桌子时的速度。如果有人想做一些注释,他们是非常欢迎的。
https://stackoverflow.com/questions/24676779
复制相似问题