gpt4 book ai didi

ruby - 在 Ruby 中将转义的 unicode (\u008E) 转换为重音字符 (Ž)?

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:36 25 4
gpt4 key购买 nike

我遇到了一个非常困难的时期:

# contained within:
"MA\u008EEIKIAI"

# should be
"MAŽEIKIAI"

# nature of string
$ p string3
"MA\u008EEIKIAI"

$ puts string3
MAEIKIAI

$ string3.inspect
"\"MA\\u008EEIKIAI\""

$ string3.bytes
#<Enumerator: "MA\u008EEIKIAI":bytes>

关于从哪里开始的任何想法?

注意:这不是我的 previous question 的副本.

最佳答案

\u008E 表示代码点为 8e(十六进制)的 unicode 字符出现在字符串中的那个位置。这个字符是控制字符“SINGLE SHIFT TWO”(参见 code chart (pdf) )。字符 Ž 位于代码点 u017d。但是它位于 Windows CP-1252 中的位置 8e编码。不知何故,您的编码混淆了。

“修复”此问题的最简单方法可能只是打开包含字符串(或数据库记录或其他)的文件并编辑它以使其正确。真正的解决方案将取决于有问题的字符串来自何处以及您有多少错误字符串。

假设字符串在 UTF-8 encoding 中, \u008E 将包含两个字节 c28e。注意第二个字节8e,与CP-1252中Ž的编码相同。转换字符串的方式是这样的:

string3.force_encoding('BINARY') # treat the string just as bytes for now
string3.gsub!(/\xC2/n, '') # remove the C2 byte
string3.force_encoding('CP1252') # give the string the correct encoding
string3.encode('UTF-8') # convert to the desired encoding

请注意,这不是解决所有此类问题的通用解决方案。并非所有 CP-1252 字符,当以这种方式以 UTF-8 格式进行损坏和表达时,都可以像这样进行转换。一些将是两个字节 c2 xx 其中 xx 是正确的字节(就像在这种情况下),其他将是 c3 yy 其中 yy 是一个不同的字节。

关于ruby - 在 Ruby 中将转义的 unicode (\u008E) 转换为重音字符 (Ž)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17043840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com