将UTF-8转换为CP1252 ruby 2.2
如何在ruby 2.2上保持所有字符从UTF-8转换为CP1252 此代码:将UTF-8转换为CP1252 ruby 2.2,ruby,utf-8,Ruby,Utf 8,如何在ruby 2.2上保持所有字符从UTF-8转换为CP1252 此代码: file = 'd:/1 descrição.txt' puts file.encode('cp1252') 请给出以下错误: `encode': U+0327 to WINDOWS-1252 in conversion from UTF-8 to WINDOWS-1252 (Encoding::UndefinedConversionError) 我的应用程序需要是cp1252,但我找不到任何方法来保留所有字符 我
file = 'd:/1 descrição.txt'
puts file.encode('cp1252')
请给出以下错误:
`encode': U+0327 to WINDOWS-1252 in conversion from UTF-8 to WINDOWS-1252 (Encoding::UndefinedConversionError)
我的应用程序需要是cp1252,但我找不到任何方法来保留所有字符
我无法替换此字符,因为稍后我将使用此信息从文件系统读取文件
puts file.encode('cp1252', undef: :replace, replace: '')
> d:/1 descricao.txt
ps:它是一个ruby脚本,不是RubyonRails应用程序,UTF-8涵盖了整个unicode范围,但CP1252只包括其中的一个子集。显然,这意味着有些字符可以用UTF-8编码,但不能用CP1252编码。这就是你面临的问题 在您的示例中,字符串似乎只包含应在CP1252中使用的字符,但显然不包含 错误消息中的字符为,在CP1252中不可表示。它与前面的
c
组合生成ç
ç
也可以表示为单个字符(),可以在CP1252中表示
file = 'd:/1 descrição.txt'.unicode_normalize(:nfc)
puts file.encode('cp1252')
一个选项可能是,它将字符串转换为可在CP1252中表示的形式
file = 'd:/1 descrição.txt'.unicode_normalize(:nfc)
puts file.encode('cp1252')
(显示问题时,堆栈溢出似乎正在规范化字符串,这可能就是为什么从问题复制代码并运行它不会产生任何错误。)
这将避免出现错误,但请注意,除非原始字符串已经是已知的标准化形式,否则不一定能够反转获取原始字符串的过程。UTF-8涵盖了整个unicode范围,但CP1252仅包括其中的一个子集。显然,这意味着有些字符可以用UTF-8编码,但不能用CP1252编码。这就是你面临的问题 在您的示例中,字符串似乎只包含应在CP1252中使用的字符,但显然不包含 错误消息中的字符为,在CP1252中不可表示。它与前面的
c
组合生成ç
ç
也可以表示为单个字符(),可以在CP1252中表示
file = 'd:/1 descrição.txt'.unicode_normalize(:nfc)
puts file.encode('cp1252')
一个选项可能是,它将字符串转换为可在CP1252中表示的形式
file = 'd:/1 descrição.txt'.unicode_normalize(:nfc)
puts file.encode('cp1252')
(显示问题时,堆栈溢出似乎正在规范化字符串,这可能就是为什么从问题复制代码并运行它不会产生任何错误。)
这将避免出现错误,但请注意,除非原始字符串已经是已知的规范化形式,否则不一定能够反转获取原始字符串的过程。我使用的是Ruby 2.3,您的代码不会产生错误。您确定字符串是正确的,并且在源代码中是UTF-8吗?我使用的是Ruby 2.3,您的代码不会产生错误。您确定字符串是正确的,并且在源代码中是UTF-8吗?