Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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
将UTF-8转换为CP1252 ruby 2.2_Ruby_Utf 8 - Fatal编程技术网

将UTF-8转换为CP1252 ruby 2.2

将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,但我找不到任何方法来保留所有字符 我

如何在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,但我找不到任何方法来保留所有字符

我无法替换此字符,因为稍后我将使用此信息从文件系统读取文件

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吗?