2
我试图从存储MP3的标签SQLite数据库,我收到以下错误:如何清理字符串以便存储在sqlite数据库中?
SQL (0.3ms) INSERT INTO "songs" ("album", "artist", "created_at", "length", "path", "store_id", "title", "track_number", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) [["album", "\xFF\xFE2\x001\x00"], ["artist", "\xFF\xFEa\x00d\x00e\x00l\x00e\x00"], ["created_at", Tue, 24 Jul 2012 03:34:03 UTC +00:00], ["length", 15], ["path", "/audios/music/Adele - Discography (Complete) [2008 - 2011]/Adele - 21 [2011] + Bonus Tracks/01. Adele - Rolling in the Deep.mp3"], ["store_id", 3], ["title", "\xFF\xFEr\x00o\x00l\x00l\x00i\x00n\x00g\x00 \x00i\x00n\x00 \x00t\x00h\x00e\x00 \x00d\x00e\x00e\x00p\x00"], ["track_number", "01"], ["updated_at", Tue, 24 Jul 2012 03:34:03 UTC +00:00]]
Encoding::UndefinedConversionError: "\xFF" from ASCII-8BIT to UTF-8: INSERT INTO "songs" ("album", "artist", "created_at", "length", "path", "store_id", "title", "track_number", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
(0.2ms) rollback transaction
ActiveRecord::StatementInvalid: Encoding::UndefinedConversionError: "\xFF" from ASCII-8BIT to UTF-8: INSERT INTO "songs" ("album", "artist", "created_at", "length", "path", "store_id", "title", "track_number", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
我怎么能剥离或净化输入?
输入数据真的看起来像 '\ XFF \ xFE2 \ X001 \ X00'? – 2012-07-24 12:47:25
数据是从id3标签自动生成的,大多数程序似乎去除这些字符,其他程序显示为空框或问号。我正在使用'Song.new'并单独设置每个值,错误代码将垃圾字符显示为问号,但在更改为'Song.create(hash)'后,它会显示以上内容。 – everett1992 2012-07-24 13:03:33
Axctivrecord抱怨从ASCII-8BIT到UTF-8的Encoding :: UndefinedConversionError:“\ xFF”,但显然'\ xFF \ xFE2 \ x001 \ x00'不在'ASCII-8BIT'编码中。所以,你可以通过在调用ActiveRecord之前将id3标签转换为UTF-8来解决这个问题。 – 2012-07-24 18:52:50