Ruby 无法删除包含特殊字符的dynamoDB记录

Ruby 无法删除包含特殊字符的dynamoDB记录,ruby,utf-8,amazon-dynamodb,special-characters,Ruby,Utf 8,Amazon Dynamodb,Special Characters,我有一些无法删除的dynamoDB记录,我注意到那些有问题的记录都包含特殊字符。我编写了一小段测试代码,能够重复这个问题: require 'aws-sdk-core' require 'aws-record' class Task include Aws::Record set_table_name "blah" string_attr :customer_id, hash_key: true string_attr :item, range_key:

我有一些无法删除的dynamoDB记录,我注意到那些有问题的记录都包含特殊字符。我编写了一小段测试代码,能够重复这个问题:

require 'aws-sdk-core'
require 'aws-record'

class Task
    include Aws::Record  
    set_table_name "blah"

    string_attr :customer_id, hash_key: true
    string_attr :item, range_key: true
    string_attr :operation, default_value: '+'
    string_attr :device, default_value: 'office-pc'
    string_attr :time, default_value: "00" + Time.now.to_i.to_s
    string_attr :quantity, default_value: '1'
end

Aws.config.update(
    {
        region: 'us-west-2',
        credentials: Aws::Credentials.new(
            'foo', 
            'bar'
        ),
        ssl_verify_peer: false
    }
)

#insert two rows
task1 = Task.new(customer_id: "a", item: "\u2713")
task1.save()
task2 = Task.new(customer_id: "a", item: "check")
task2.save()

#query and delete both
resp = Task.query({
    key_conditions: {
        "customer_id" => {
            attribute_value_list: ["a"], 
            comparison_operator: "EQ", 
        }
    }
})
resp.each do 
    |task|
    puts task.item
    task.delete!
end

#query again, to see what's left
resp = Task.query({
    key_conditions: {
        "customer_id" => {
            attribute_value_list: ["a"], 
            comparison_operator: "EQ", 
        }
    }
})
resp.each do 
    |task|
    puts task.item
end
下面是输出,如您所见,前两行显示插入的内容,最后一行显示删除后\u2713仍然存在

check
Ô£ô
Ô£ô

gem版本:aws sdk核心:2.6.49,aws sdk资源:2.6.49,aws记录:1.0.3。它们都是最新的版本。ruby是windows上的2.3.1版本。

问题在于sdk gem:aws-sdk-core-2.7.0(OP发布时2.6.49是最新版本,现在2.7.0是最新版本)。只需在lib\aws sdk core\json\handler.rb中更改一行即可轻松修复

变化如下:

def parse_body(context)
    if simple_json?(context)
        Json.load(context.http_response.body_contents)
    else
        rules = context.operation.output
        json = context.http_response.body_contents.bytes.pack('c*').force_encoding('utf-8')
        #below line is the original code
        #json = context.http_response.body_contents
        Parser.new(rules).parse(json == '' ? '{}' : json)
    end
end

会有什么反应?你们能检查一下从控制台删除吗?是的,我只是说,若你们能从控制台删除,那个么代码或sdk可能有问题