从 Progress / OpenEdge 中的字符串中删除所有特殊字符时出现奇怪的结果

Strange results when deleting all special characters from a string in Progress / OpenEdge

我有下面的代码片段(如之前的 Stack Overflow 答案中所建议的那样... Deleting all special characters from a string in progress 4GL)它试图从字符串中删除所有扩展字符,以便我可以将其传输到客户的系统不接受任何扩展字符。

do v-int = 128 to 255:

  assign v-string = replace(v-string,chr(v-int),"").

end.

它运行完美,只有一个例外(这让我担心可能还有其他我没有发现的例外)。当它达到 255 时,它将替换字符串中的所有 'y'。

如果我执行以下操作...

display chr(255) = chr(121). /* 121 is asc code of y */

我的结果是真的。

因此,如果我执行以下操作...

display replace("This is really strange",chr(255),"").

我得到以下结果:

This is reall strange

我已经验证 'y' 是唯一受 运行 影响的字符:

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),"").

end.

display v-string.

结果如下:

abcdefghijklmnopqrstuvwxz

我知道我可以通过从范围中删除 255 来解决这个问题,但我想了解为什么会这样。

这是字符归类集问题还是我遗漏了一些更简单的东西?

感谢您的帮助!

这似乎是一个错误!

The REPLACE() function returns an unexpected result when replacing character CHR(255) (ÿ) in a String.

The REPLACE() function modifies the value of the target character, but additionally it changes any occurrence of characters 'Y' and 'y' present in the String.

This behavior seems to affect only the character ÿ. Other characters are correctly changed by REPLACE().

Using default codepage ISO-8859-1

Link to knowledgebase

这是一个错误。这是关于它的 Progress Knowledge Base 文章:

http://knowledgebase.progress.com/articles/Article/000046181

解决方法是在 CHR() 语句中指定代码页,如下所示:

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.

您现在应该在输出中看到 'y'。