- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
双关语。
问题始于一个非常古老的 dBase 数据库,其中文本信息直接编码到 DOS Cyrillic (CP-866) 中。 ,而且因为这还不够,它还每天晚上被传输到我可以访问的 MySQL 数据库。
我已经安装了 MySQL 提供程序并使用 Entity Framework 连接到数据库,这是我的主要数据访问方法,然后出于实验原因也使用纯 ADO.NET。
一切都比预期的要好,直到我尝试将假定的 CP-866 值从数据库转换为 UTF-8,如下所示:
var cp866 = Encoding.GetEncoding(866);
var utf8 = Encoding.UTF8;
string source = "some unreadable set of characters from the database";
byte[] cp866bytes = cp866.GetBytes(source);
byte[] utf8bytes = Encoding.Convert(cp866, utf8, cp866bytes);
string result = utf8.GetString(utf8bytes);
我用 EntityFramework 读过一次,用 ADO.NET 读过一次,结果相同。
由于当时未知的和现在不太为人所知的原因,它没有用。在阅读了一些关于编码和字符串值的重要文章后,我确定由于字符串变量本身的性质,不可能将此类转换应用于数据库中与 varchar 字段等效的字符串。
后来,我终于通过使用 ADO.NET MySQL Provider 并通过将 CONVERT(varcharColumn, Binary) 添加到我正在测试的列来自定义我的查询来实现它。
从那时起,我使用上面的代码,唯一的区别是我已经从转换中获得了 cp866 字节数组。我最初打算做类似的事情,但 MySQL 提供程序无法直接从 varchar 字段读取字节,我也没有找到使用 Entity Framework 来完成它的方法。
是的,它有效,但即使是我没有经验的自己也感觉不对。
1:我能否指定 Entity Framework 应如何选择特定字段?
我想以某种方式解释我心爱的 ORM,它应该在读取期间将特定的 varchar 字段转换为二进制,根本不返回字符串表示,因为它把一切都搞砸了。
2:有没有办法让 ADO.NET MySQL 提供程序获取 varchar 字段的字节,而无需先将其作为字符串提取?
GetBytes 方法在与 varchar 一起使用时会抛出异常,而通常存在于 ADO.NET 提供程序中的 GetSqlBytes 方法在 MySQL 版本中缺失。我真的不想在我需要正确阅读的每个字段上编写 Binary Convert。
3:奖励问题:是否可以像我一样将 CP-866 编码的 varchar 字段作为字符串读取,但这次正确地将编码更改为 UTF-8?
今天读完后,关于编码的话题,我脑子里还是一片困惑。我仍然相信我可能遗漏了一些东西,并且可以从 cp-866 编码的 varchar 字段中读取一个字符串,例如:
string cp866EncodedValue = "Œ€„‹… Œ‹€„…Ž‚€ Šš…‚€"; //actual copy-pasted value
.. 然后将其转换为 UTF-8,同时请记住数据库中的字段是使用 CP-866 编码的。根据我的阅读,只要它在字符串中,它就是 unicode 并且字符串是不可变的。我尝试获取它的 byre 数组表示,将其更改为 cp866,然后更改为 utf8,我尝试使用它,因为它是 cp866 本身,但没有成功。
最佳答案
首先我会检查您的数据库和/或您的相关表的当前编码。
@eggyal 指向链接,其中有用于设置某些变量的这些命令:
SET character_set_client = charset_name;
SET character_set_results = charset_name;
SET character_set_connection = charset_name;
要检查这些,请使用以下内容:
SHOW VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_results';
SHOW VARIABLES LIKE 'character_set_connection';
然后对于数据库默认的字符编码,使用:
SHOW CREATE DATABASE databaseName;
然后对于那个特定的表,请检查:
show create table TABLE_IN_QUESTION;
在这些之后,您知道哪些是您的数据库和/或表的确切编码。
我解决所发现问题的解决方案只是指向一个有趣来源的链接。请看看这篇文章是否有相关内容要讲述:
http://nicj.net/mysql-converting-an-incorrect-latin1-column-to-utf8/
附言。 是,我可以读取 url,它说明转换 latin1 -> utf8,但据我了解,相同的提示也适用于其他字符编码对。
关于c# - 在使用 Entity Framework 和 MySQL 读取期间将 VARCHAR 作为 BINARY 访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907636/
我遇到以下问题。我想读取一个包含数百万行和数百列的大型 csv。我想向下转换列的数据类型。我的方法是读取 csv,然后使用 pd.to_numeric() 对其进行向下转换。我不知道列数及其类型。在读
目前,我从 SQL server (2008) 数据库获取数据。 cyurrent的方法是使用DataTable,然后将其传递并使用。 if (parameters != null)
我有以下问题。我有一个巨大的 csv 文件,想用多处理加载它。对于一个包含 500000 行和 130 列不同数据类型的示例文件,Pandas 需要 19 秒。我试过 dask 因为我想多处理阅读。但
是否有关于用于序列化各种 MFC 数据结构的二进制格式的明确文档?我已经能够在十六进制编辑器中查看我自己的一些类,并使用 Java 的 ByteBuffer 类读取它们(使用自动字节顺序转换等)。 但
我正在使用 Selenium 进行测试,我们用 HTML 文件编写测试用例,并用它们制作测试套件,我们的要求是编写足够健壮的测试用例,以根据测试环境改变自身。 为此,我不希望在 HTML 脚本本身中包
我需要一个 JavaScript 代码来读取存储为 .txt 文件的字典(或者也可以保存为任何其他类型的文件。它也可以在线获得)并将其内容存储在一个变量中。我不能找到一种让 JavaScript 像
我正在尝试遍历包含 SSH 登录和其他日志的日志文本文件。 程序正在返回 SSH 登录的总数。 我的解决方案确实有效,但似乎有点慢(在 200mo 文件上大约需要 3.5 秒)。我想知道是否有任何方法
我正在将大量数据从一个电子表格复制到工作簿中的其他 160 个电子表格。目前,Excel (2013) 遇到错误,因为它没有足够的资源来完成操作。 我的目标是将工作表 4 中 V13:XI1150 范
我正在尝试读取一个有 1147 行的文本文件。下面的代码仅读取第 1050-1147 行。我的目标是读取整个文件并提取位于不同行的特定值以在脚本中使用。一个示例是包含“BlockList: 2”的行中
我正在为游戏编写解释器。用户将其移动输入解释器,程序执行该移动。 现在我想为每个决定实现一个时间限制。玩家不应该能够思考超过 30 秒来写一个移动并按下回车。 call_with_time_limit
以this file例如,我正在尝试读取 data.frame 中的数据。来自 the doc (pdf 文件,表 1),它遵循一些 fortran 约定。我尝试了以下但收效甚微: dir 0' 将
我正在使用 R 阅读 Outlook 附件。我的引用在这里:Download attachment from an outlook email using R 这是我的电子邮件的截图: 这每天都会发送
我不会从表格中读取行来将主题放在列表中 php脚本 $url_obj='http://'.$host.':8069/xmlrpc/object'; $sock=new xmlrpc_client($u
我有一个这样的 csv 文件: id,name,value 1,peter,5 2,peter\,paul,3 我如何读取此文件并告诉 R "\," 不表示新列,仅表示 ","。 我必须添加该文件
我正在尝试读取 ~/Library/Preferences/com.apple.mail.plist (在 Snow Leopard 上)以获取电子邮件地址和其他信息以进入“关于”对话框。我使用以下代
This question already has answers here: How do I use floating-point division in bash? (19个回答) 5个月前关闭
本练习的目标是读取输入文件并将其存储到表中,然后验证输入中的某些字段并输出任何错误记录。我需要读取并存储每个策略组,以便表中一次仅存储 5 条记录,而不是整个文件。 所以我需要读取一个包含 5 条记录
据我了解,LWT 插入始终以 SERIAL 一致性级别完成。如果为 true,这是否意味着读取作为 LWT 插入的行可以安全地以 ANY 的一致性级别读取? 换句话说,我假设 LWT 插入是完全一致的
我看到很多很多通过java脚本读取cookie的函数,但我只想在变量中使用它一次,我是JS新手。 这是我的代码 var TheNumber = (Math.random() + '') * 10000
我正在使用 asp.net 和 C#。我在服务器上部署了一个应用程序[已发布],现在我想查看该网站的代码,据我所知,我可以阅读程序集来查看代码。 请告诉我如何实现它。 提前致谢。 最佳答案 您可以使用
我是一名优秀的程序员,十分优秀!