Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 用多字符串替换字符_Postgresql_Encoding_Replace_Diacritics - Fatal编程技术网

Postgresql 用多字符串替换字符

Postgresql 用多字符串替换字符,postgresql,encoding,replace,diacritics,Postgresql,Encoding,Replace,Diacritics,我正试图取代德国和荷兰的元音,如ä,ü,或ß。它们应该像ae那样编写,而不是像a那样编写。所以我不能简单地把一个字符翻译成另一个字符 有没有更优雅的方法?实际上看起来是这样的(尚未完成): 在尝试不同命令的过程中,我遇到了另一个问题: 当我搜索Ü时,我得到了以下信息: 错误:编码“UTF8”的字节序列无效:0xdc27 用U&'\0220'尝试过,但没有替换任何内容。只有通过使用ü(小写ü)才能正确替换。必须使用unicode,但是如何解决这个问题呢 来自德国的亲切问候。:) 您的服务器编码似

我正试图取代德国和荷兰的元音,如
ä
ü
,或
ß
。它们应该像
ae
那样编写,而不是像
a
那样编写。所以我不能简单地把一个字符翻译成另一个字符

有没有更优雅的方法?实际上看起来是这样的(尚未完成):

在尝试不同命令的过程中,我遇到了另一个问题:

当我搜索
Ü
时,我得到了以下信息:

错误:编码“UTF8”的字节序列无效:0xdc27

U&'\0220'
尝试过,但没有替换任何内容。只有通过使用
ü
(小写
ü
)才能正确替换。必须使用unicode,但是如何解决这个问题呢


来自德国的亲切问候。:)

您的服务器编码似乎是UTF8。
我怀疑你的
客户编码不匹配,这可能会给你一个错误的印象。检查:

SHOW client_encoding;   -- in your actual session
阅读以下相关答案:

工具链的其余部分也必须同步。例如,在使用puTTY时,必须确保终端与其他终端一致:
更改设置。。。窗口->翻译->远程字符集
=
UTF-8

至于你的第一个问题,你已经有了最好的解决方案。最好用一组
replace()
语句替换两个UMLAUT

正如您似乎已经知道的,使用(单个)语句进行单字符替换更有效

相关的:


除其他原因外,我决定用python编写替换代码。像Erwin以前写的那样,似乎没有更好的解决方案可以组合
replace
-命令

一般来说相当简单,甚至不需要使用编码。我的“最终”解决方案现在如下所示:

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))
我现在期待着它击中大桌子时的速度。如果有人想做一些注释,我们非常欢迎


感谢您的回复和问候。

我不太确定客户机/服务器编码是否不匹配。根据我的经验,这些类型的映射失败通常会导致“character has not equired”错误。“无效字节序列”听起来更像是
client\u编码设置为UTF8,但客户端程序仍在发送ANSI数据。@NickBarnes:嗯,客户端发送根据
clent\u编码编码的数据<代码>客户端编码
是双向的。所以我们可能在这里谈论同样的事情,不完全是。服务器根据
客户机编码解释客户机的数据,但是客户机可以发送它想要的任何内容。例如,如果我在Windows中启动
psql
,它默认为WIN1252。如果运行
将客户机_编码设置为“UTF8”
选择“Ü”
,则会出现“无效字节序列”错误
psql
不知道有什么变化;它仍然以ANSI的形式发送数据。@NickBarnes:说得好。我在前面评论中的描述不太正确。例如,当使用腻子时,必须确保端子与其他端子一致<代码>更改设置。。。窗口->翻译->远程字符集:UTF-8
@Erwin:这就是重点。我正在使用超级按钮,必须将字符集更改为UTF-8。虽然问题应该得到解决-但是:选择一个在街道内有umlaut的地址,umlaut仍然不能正确显示。相反,我得到的是
Ã
而不是
ß
。然而,我的问题解决了。谢谢大家!Unicode转义序列是十六进制的;您需要
U&'\00DC'
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))