gpt4 book ai didi

ruby-on-rails - 将不可打印的字符保存到 Rails 中的数据库

转载 作者:搜寻专家 更新时间:2023-10-30 20:32:32 25 4
gpt4 key购买 nike

我无法使用 Rails (v2.2) 将不可打印的字符(例如“\x83”)保存到数据库中。

简化示例(来自控制台):

>> f = FileSpace.create( { :name => "/tmp/\x83" } )
=> #<FileSpace id: 7, name: "/tmp/\203">
>> f.name
=> "/tmp/\203"
>> FileSpace.last
=> #<FileSpace id: 7, name: "/tmp/">

所以您可以看到,Rails 正在默默地丢弃字符串中的“\x83”(或“\203”)字符。

“\83”字符存储在数据库中:

mysql> SELECT hex(name) FROM file_spaces WHERE id=7;
+------------------------------------+
| hex(name) |
+------------------------------------+
| 2F746D702F |
+------------------------------------+
1 rows in set (0.03 sec)

mysql> select x'2F746D702F';
+---------------+
| x'2F746D702F' |
+---------------+
| /tmp/ |
+---------------+
1 row in set (0.00 sec)

那么,我怎样才能让 Rails 保存不可打印的字符呢?

最佳答案

我无法告诉您 \x83 丢失的确切位置,但我猜是数据库(至少 PostgreSQL 拒绝该字符串,因为字节编码无效)。

要解决这个问题,您可以对字符串进行 base64 编码并存储该字符串:

require 'base64'
str = "/tmp/\x83"
encoded = Base64.encode64(str) => "L3RtcC+D\n"
Base64.decode64(encoded) => "/tmp/\x83"

关于ruby-on-rails - 将不可打印的字符保存到 Rails 中的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2331252/

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