大佬教程收集整理的这篇文章主要介绍了Ruby on Rails Encoding::UndefinedConversionError(“\xF8”从 ASCII-8BIT 到 UTF-8),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我看到了一堆具有类似主题的问题,但我找不到解决我的问题的方法。希望有人能提供帮助。
我有一个 Ruby on Rails 应用。在这个应用程序中,我有一些 base64 数据要解码并写入文件。当我有一个通过 ruby myfile.rb 调用的小脚本时,该程序的行为与预期一致。但是,当我使用 rails c 运行相同的代码时。我有以下错误:
TraceBACk (most recent call last):
7: from (irb):1:in `<main>'
6: from app/models/node.rb:1:in `<main>'
5: from app/models/node_manager.rb:317:in `<main>'
4: from app/models/node_manager.rb:255:in `converT_Base64_to_file'
3: from app/models/node_manager.rb:255:in `open'
2: from app/models/node_manager.rb:255:in `block in converT_Base64_to_file'
1: from app/models/node_manager.rb:255:in `write'
EnCoding::UndefinedConversionError ("\xF8" from ASCII-8BIT to UTF-8)
这是我的文件:
class I wrote in node_manager.rb
class NodeManager
class MacaroonInterceptor < GRPC::ClIEnTinterceptor
attr_reader :macaroon
def initialize(macaroon)
@macaroon = macaroon
super
end
def request_response(request:,call:,method:,Metadata:)
Metadata['macaroon'] = macaroon
yIEld
end
def server_streamer(request:,Metadata:)
Metadata['macaroon'] = macaroon
yIEld
end
end
def initialize(tls_path,macaroon_path,node_ip)
@tls_path = tls_path
@macaroon_path = macaroon_path
@node_ip = node_ip
@node = connect(@tls_path,@macaroon_path,@node_ip)
end
def connect(tls_path,node_ip)
certificate = file.read(file.expand_path(tls_path))
credentials = GRPC::Core::ChAnnelCredentials.new(certificatE)
macaroon_binary = file.read(file.expand_path(macaroon_path))
macaroon = macaroon_binary.each_byte.map { |b| b.to_s(16).rjust(2,'0') }.join
if stub = Lnrpc::lightning::stub.new(
node_ip,credentials,interceptors: [NodeManager::MacaroonInterceptor.new(macaroon)],chAnnel_args: {"grpc.max_receive_message_length" => 1024 * 1024 * 50}
)
return stub
else
puts 'error'
raise "Could not connect to the node"
end
end
def get_info()
begin
node_info = @node.get_info(Lnrpc::GeTinforequest.new())
raise LoadError if !node_info
return @node.get_info(Lnrpc::GeTinforequest.new())
rescue
puts "Could not connect to the node"
end
end
# Class methods
def self.converT_Base64_to_file(directory: nil,file_name:,base64data:)
if Directory
file_path = [directory,file_name].join('/')
else
file_path = file_name
end
file = file.open("file_name",'w') {|f| f.write(Base64.decode64(base64data)) }
return file_path
end
end
我运行的脚本 - 当我调用 ruby node_manager.rb 而不是当我用 rails c 运行它时工作
admin_tls_base64 = "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JsUNKekNDQWMyZ0F3SUJBZ0lSQulWYzdlNHkxVGlpcHpmNWtHd09BUkF3Q2dZSUtvWkl6ajBFQXdJd01URWYKTUIwR0ExVUVDaE1XYkc1a0lHRjFkRzluWlc1bGNtRjBaV1FnWTJWeWRERU9NQXdHQTFVRUF4TUZZV3hwWTJVDWpIaGNOTWpFd056QTRNVEF5TmpFMFdoY05Nakl3T1RBeU1UQXlOakUwV2pBeE1SOHdIUVlEVlFRS0V4WnNibVFnCllYVjBiMmRsym1WeVlYUmxaQ0JqWlhKME1RNHdEQVlEVlFRREV3VmhiR2xqWlRCWk1CTUdCeXFHU000OUFnRUcKQ0NxR1NNNDlBd0VIQTBJQUJMQ3B2eDdZb1ptZURIQVdjN0ozdmZTTUhPNEJhRnpMV0hJUXhJM2swaVJRS2xVVQpaSkdUcnFCQm1kU3AzcnNRMWsvSmtqOVlLZEVRMHVmcTdNeDBzcEdqZ2NVd2dJsXdEZ1lEVliwUEFRSC9CQVFECkFnS2tNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUZCd01CTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME8KQkJZRUZJWlUrUHlTYVB0eFdOV0RqckJ5SUZuVXdTL0JNR3NHQTFVZEVRUmtNR0tDQldGc2FXTmxnZ2xzYjJOaAPIR2h2YzNTQ0JXRnNhV05sZ2c1d2IyeGhjaTF1TWkxaGJHbGpaWulFZFc1cGVJsUtkVzVwZUhCaFkydGxkSUliClluVm1ZMjl1ym9jRWZ3QUFBWWNRQUFBQUFBQUFBQUFBQUFBQUFBQUFBWWNFckJJQUFqQUtCZ2dxaGtqT1BRUUQKQWdOSUFEQkZBaUVBbDhnOERONStpRTA5c1ZZS2RoblExUmZWeWhhaTdLMG9xK2puV3NyNHpVNENJR2t6Nko4eQprTk4rSTRHT040UGNIWGN1QjRjWEt1aDJxVWFvd2IvZVBxV3YKLS0tLS1FTkQgQ0VsvelGSUNBVEUtLS0tLQo="
admin_mac_base64= "AgEDbG5kAvgBAwoQ4MUVu75H5pCIGbg7qzbRfBIBMBoWCgdhZGRyZXNzEgRyZWFkEgV3cml0ZRoTCgRpbmZvEgRyZWFkEgV3cml0ZRoXCghpbnZvaWNlcxIEcmVhZBIFd3JpdGUaIQoIbWFjYXJvb24SCGdlbmVyYXRlEgRyZWFkEgV3cml0ZRoWCgdtZXNzYWdlEgRyZWFkEgV3cml0ZRoXCghvZmZjaGFpbhIEcmVhZBIFd3JpdGUaFgoHb25jaGFpbhIEcmVhZBIFd3JpdGUaFAoFcGVlcnMSBHJlYWQSBXdyaXRlGhgKBnNpZ25lchIIZ2VuZXJhdGUSBHJlYWQAAAYgzSSZTiO2yEt9aP+zP95czvfNNPgQXhyLNto2X1onfqQ="
admin_tls = NodeManager.converT_Base64_to_file(file_name: "test_tls.cert",base64data: admin_tls_base64)
admin_mac = NodeManager.converT_Base64_to_file(file_name: "test.macaroon",base64data: admin_mac_base64)
admin_node = NodeManager.new(admin_tls,admin_mac,'127.0.0.1:10001')
puts admin_node.get_info
感谢您的帮助,
一个简单的解决方案是给 File.write 函数“wb”权限
def self.converT_Base64_to_file(directory: nil,file_name:,base64data:)
if Directory
file_path = [directory,file_name].join('/')
else
file_path = file_name
end
file = File.open("file_name",'w') {|f| f.write(Base64.decode64(base64data)) }
return file_path
end
我希望这会帮助某人!
以上是大佬教程为你收集整理的Ruby on Rails Encoding::UndefinedConversionError(“\xF8”从 ASCII-8BIT 到 UTF-8)全部内容,希望文章能够帮你解决Ruby on Rails Encoding::UndefinedConversionError(“\xF8”从 ASCII-8BIT 到 UTF-8)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。