我有下面的代码片段(正如之前的Stack Overflow回答... Deleting all special characters from a string in progress 4GL中所建议的那样),它试图从字符串中删除所有扩展字符,以便我可以将其传输到客户的系统不接受任何扩展字符。
执行v-int = 128到255:
assign v-string = replace(v-string,chr(v-int),"").
端。
它完美地处理了一个例外(这让我担心可能还有其他一些我没有抓到)。当它达到255时,它将替换字符串中的所有'y'。
如果我执行以下操作......
显示chr(255)= chr(121)。 / * 121是y * /
的asc代码
我的结果是真的。
因此,如果我做以下事情......
显示替换(“这真的很奇怪”,chr(255),“”)。
我得到以下结果:
这很奇怪
我已经确认'y'是受运行以下内容影响的唯一字符:
def var v-string as char init“abcdefghijklmnopqrstuvwxyz”。 def var v-int as int。
执行v-int = 128到255:
assign v-string = replace(v-string,chr(v-int),“”)。
端。
显示v-string。
结果如下:
abcdefghijklmnopqrstuvwxz
我知道我可以通过从范围中移除255来解决这个问题,但我想了解为什么会发生这种情况。
这是一个角色整理设置问题还是我错过了一些更简单的东西?
感谢您的帮助!
答案 0 :(得分:4)
这是一个错误。这是关于它的Progress Knowledge Base文章:
http://knowledgebase.progress.com/articles/Article/000046181
解决方法是在CHR(255, "UTF-8", "1252")
语句中指定代码页,如下所示:
def var v-string as char init "abcdefghijklmnopqrstuvwxyz". def var v-int as int.
do v-int = 128 to 255:
assign v-string = replace(v-string, chr(v-int, "UTF-8", "1252"), "").
end.
display v-string.
这是你的例子:
{{1}}
你现在应该看到' y'在输出中。
答案 1 :(得分:3)
这似乎是一个错误!
当替换字符串中的字符CHR(255)(ÿ)时,REPLACE()函数返回意外的结果。
REPLACE()函数修改目标字符的值,但另外它会更改字符串中出现的任何字符“Y”和“y”。
此行为似乎只影响角色ÿ。 REPLACE()正确更改了其他字符。
使用默认代码页ISO-8859-1