DataGrip导出CSV文件中文乱码

最近用DataGrip导出查询结果为CSV文件后,用Excel打开发现中文出现乱码的情况: 搜出来很多解决DataGrip中文乱码的方法都不对。后来发现我错怪DataGrip了,原来这是Excel的一个特性导致的:Excel读取文件时,不是默认按照utf-8编码读取的,而是会根据文件的BOM头来识别,如果没有BOM头,则按照unicode编码处理。 而DataGrip导出的CSV文件是不包含BOM头的,所以Excel按照unicode编码读取就会出现中文乱码。 解决方案一 对于已导出的CSV文件,可以用Notepad++或其他文本编辑器打开,然后菜单栏选择“编码”–>“转为UTF-8 BOM编码”,然后保存即可。 这时候再用Excel打开,中文就可以正常显示了。 解决方案二 不直接导出文件,查询出结果后,在结果栏右上角选择导出格式为Tab-separated(TSV),然后选择导出到剪贴板,或者Ctrl+A全选结果后复制,然后直接粘贴到Excel中即可。

December 17, 2019 · 1 分钟 · Remo

【转】C#基础小知识之 yield 关键字

转自博客:一天两天三天 对于yield关键字我们首先看一下 msdn 的解释: 如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法、运算符或 get 访问器是迭代器。 通过使用 yield 定义迭代器,可在实现自定义集合类型的 IEnumerable 和 IEnumerator 模式时无需其他显式类(保留枚举状态的类,有关示例,请参阅 IEnumerator)。 yield是一个语法糖 看 msdn 的解释总是让人感觉生硬难懂。其实 yield 关键字很好理解。首先我们对于性质有个了解。yield 是一个语法糖。既然 yield 是在C#中的一个语法糖,那么就说明yield是对一种复杂行为的简化,就是将一段代码简化为一种简单的形式,方便我们程序员使用。 那么yield到底是对什么行为的简化。我们首先来看一下yield的使用场景。 还是来看msdn上的例子。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { foreach (int i in Power(2, 8, "")) { Console.Write("{0} ", i); } Console.ReadKey(); } public static IEnumerable<int> Power(int number, int exponent, string s) { int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; yield return result; } yield return 3; yield return 4; yield return 5; } } } 这是msdn上yield的一种使用场景。...

August 16, 2019 · 5 分钟 · Remo

解决Google Play报错DF-DFERH-01问题

博主最近换了港版三星S10+,刚开始用港行系统的时候,Google Play使用一直没有任何问题。后来刷成国行系统后,在某一次系统重启之后,Google Play突然开始无法连接,显示“从服务器检索信息时出错。DF-DFERH-01”这个错误。 经过一番搜索,发现是因为国行的谷歌框架会请求一个.cn后缀的域名“services.googleapis.cn”,这个.cn后缀的域名会自动被识别为国内域名,从而绕开代理,导致Google Play连接出错。解决方法有两个: 开启全局代理或者强制让“googleapis.cn”这个域名走代理,以KoolShare的OpenWrt软路由系统为例,只需在代理工具内选择“黑白名单”,然后将该域名添加到域名黑名单内即可。添加并保存后稍等几分钟或者清空一下DNS即可生效。 如果上面的方法没有作用,还可以使路由器强制将services.googleapis.cn这个地址解析到216.58.197.195这个IP。还是以KoolShare的OpenWrt软路由系统为例,在代理工具内选择“DNS设定”,然后在“自定义dnsmasq”文本框内添加一行“address=/services.googleapis.cn/216.58.197.195”后保存即可。

April 3, 2019 · 1 分钟 · Remo

Windows 10无法快捷搜索程序或设置

自从系统升级到 windows 10以后,就开始越来越依赖它的快捷搜索功能了。 比如我想打开计算器,以前可能需要到开始菜单的附件那里去找,或者在桌面弄个快捷方式。而现在只需要在搜索框里输入“jsq”,也就是计算器的拼音首字母,就能快速的定位到计算器应用上: 不过偶尔我们会发现这个方便的功能失效了,输入“jsq”以后,只显示网络搜索结果,而不会显示计算器这个应用。不要慌,这时候只需按下Win + X组合键,在弹出菜单中选择 Windows PowerShell (管理员),然后在打开的深蓝色背景的 PowerShell 界面上输入: Get-AppXPackage -Name Microsoft.Windows.Cortana | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} 然后回车执行即可 稍等片刻,待命令执行完毕后,搜索功能应该就已经恢复了~ (如果PowerShell报错“部署失败,原因是 HRESULT: 0x80073D02, 无法安装程序包,原因是它修改的资源当前正在使用中。”,可以尝试在任务管理器中结束名为“Windows Shell Experience Host”的进程后重试)

February 12, 2019 · 1 分钟 · Remo

正则表达式之零宽断言

引用自百度百科:零宽断言是正则表达式中的一种方法,正则表达式在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。 通常我们按照一定规则通过正则表达式匹配一段字符串的时候,我们给出的规则文本也会包含在内,比如以下这个例子,我们要匹配出被“#~”和“~#”包裹的文本: var reg = "#~.*?~#"; var text = "这是一段#~测试~#文字,用来测试#~正则表达式~#。"; var matches = Regex.Matches(text.reg); foreach (Match match in matches) { Console.WriteLine(match); } Console.ReadKey(); 运行以上C#代码,我们将会看到输出的是: #~测试~# #~正则表达式~# 但是有些时候,我们不希望规则文本出现在结果之中。这时候我们就需要用上“零宽断言”了。我们只需稍稍修改一下正则的代码: var reg = "(?<=#~).*?(?=~#)"; 其他代码不变,此时输出的就是: 测试 正则表达式 这里用上的(?<=表达式)和(?=表达式)就是零宽断言中的两种形式,前者称为“零宽度正回顾后发断言”,后者称为“零宽度正预测先行断言”。 以上面的代码为例,零宽度正预测先行断言(即(?=表达式))的规则是先从给出的文本中找到第一个“~#”,然后再回过头看看“~#”前面的文本是否符合“.*”这个规则,如果符合则进行匹配,不符合则查找下一个“~#”,然后再重复以上步骤。 零宽度正回顾后发断言(即(?<=表达式))则正好相反,它是先从要匹配的字符串中的最左端找到“#~”,然后看后面的文本是否符合“.*”这个规则,如果是则匹配,如果不是再去找第二个。 当然,还有“负向零宽后发断言(?<!表达式)”和“负向零宽先行断言 (?!表达式)”两种,这两种是找到第一个不匹配表达式的,然后再去做相应判断。 注意,在Javascript中,不支持后发断言,但是在Chrome浏览器中可以正常使用后发断言,这点需要注意一下,否则在Chrome中测试通过的代码,可能换了FireFox就不行了。

March 17, 2018 · 1 分钟 · Remo