我在处理 SQlite 中的非 Eurpean 文本时遇到了噩梦。我认为问题是 SQlite 没有对 UTF8 中的文本进行编码。所以我想检查编码是什么,并希望将其更改为utf8。我用 UTF8 编码了一个 CSV,然后简单地将它导入到 SQlite,但非罗马文本是乱码。
我想知道: 1)如何检查编码。 2)如果不是utf8,如何更改编码。我一直在阅读 Pragma 编码,但我不确定如何使用它。
我使用 OpenOffice 3 创建了一个包含一半英语和一半日语文本的电子表格。接下来,我使用 utf8 将文件保存为 CSV。这部分似乎还可以。我还尝试使用 Google Docs 进行操作,效果很好。接下来我打开 SQlite 浏览器并进行 CSV 导入。英文文本显示完美,但日文文本是乱码。我认为 sqlite 使用的是不同的编码(也许是 utf16?)。
最佳答案
您可以使用此编译指示测试编码:
PRAGMA encoding;
您无法更改现有数据库的编码。要创建具有特定编码的新数据库,请打开一个到空白文件的 SQLite 连接,运行此 pragma:
PRAGMA encoding = "UTF-8";
然后创建您的数据库。
如果您有一个数据库并且需要不同的编码,那么您需要使用新编码创建一个新数据库,然后重新创建架构并导入所有数据。
但是,如果您遇到乱码问题,那几乎总是所用工具之一的问题,而不是 SQLite 本身的问题。即使 SQLite 使用不同的编码,唯一的最终结果是它会导致一些额外的计算,因为 SQLite 不断地从存储的编码转换为 API 请求的编码。如果您使用的不是 C 级 API,那么您永远不应该关心编码——您正在使用的工具所使用的 API 将决定应该使用什么编码。
许多 SQLite 工具都显示了将文本插入我们的 SQLite 之外的问题,包括命令行 shell。尝试从命令行运行 SQLite 并告诉它导入文件本身而不是通过 SQLite 浏览器。
关于sqlite - 检查 SQlite 中文本的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532532/
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否