perl字符串如何在内部表示?使用什么编码?如何正确处理不同的编码?
我已经使用perl很长一段时间了,但它不包括很多字符串处理在不同的编码,当我遇到一个与编码有关的小问题时,我通常采取一些萨满行动.
直到这一刻我才将perl字符串视为字节序列,这对我的任务非常适合.现在我需要对UTF-8编码文件进行一些处理,这里就麻烦了.
首先,我将文件读入字符串,如下所示:
open(my $in, '<', $ARGV[0]) or die "cannot open file $ARGV[0] for reading";
binmode($in, ':utf8');
my $contents;
{
local $/;
$contents = <$in>;
}
close($in);
Run Code Online (Sandbox Code Playgroud)
然后只需打印它:
print $contents;
Run Code Online (Sandbox Code Playgroud)
我得到两件事:警告Wide character in print at <scriptname> line <n>和控制台中的垃圾.所以我可以得出结论,perl字符串有一个"字符"的概念,可以是"宽"或不是,但是当打印时,这些"宽"字符在控制台中表示为多个字节,而不是单个"字符".(我现在想知道为什么我以前使用二进制文件的所有经验都非常适合我预期它在没有任何"字符"问题的情况下工作的方式).
为什么然后我在控制台看到垃圾?如果perl在某些已知编码中将字符串存储为字符,我认为找到控制台编码和正确打印文本并不是一个大问题.(我使用Windows,BTW).
如果perl将字符串存储为可变宽度字符序列(例如,使用相同的UTF-8编码),为什么这样做?从我的C经验来看,处理字符串是PAIN.
更新.
我使用两台计算机进行测试,一台运行安装了英语语言包的Windows 7 x64,但使用ActivePerl 5.10.1 x64进行俄语区域设置(因此我将cp866作为OEM代码页,cp1251作为ANSI); 另一个运行Windows XP 32位俄语本地化与Cygwin Perl 5.10.0.
感谢链接,现在我对正在发生的事情以及应该如何完成工作有了更深刻的理解.
很清楚如何创建一个从URL正则表达式调度的URLPattern:
(r'^books/$', books),
Run Code Online (Sandbox Code Playgroud)
这里的书可以根据要求的方法,还派遣:
def books(request):
if request.method == 'POST':
...
else:
...
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种惯用的方法在URLPattern中包含请求方法,将所有调度/路由信息保存在一个位置,例如:
(r'^books/$', GET, retrieve-book),
(r'^books/$', POST, update-books),
(r'^books/$', PUT, create-books),
Run Code Online (Sandbox Code Playgroud) 我在ASP.NET 2页面的运行时收到此消息:
"MyFolder/blabla.aspx"页面无法使用用户控件"MyFolder/MyControl.ascx",因为它在web.config中注册并与页面位于同一目录中.
当然我可以将它们分成2个不同的文件夹,从而解决问题,但问题是:
WTF!?!?!为什么我不能把它们放在同一个文件夹里?!为什么他们不能......相处!?!:)
谢谢
我正在为即将到来的项目评估两个对象数据库db4o(http://www.db4o.com)和Eloquera数据库(http://eloquera.com).我必须选择一个.我的基本要求是RAD的可扩展性,多用户支持和简单的类型演变.
请分享您的真实世界体验.
如果你有两者,你能比较这两个吗?你喜欢哪个?
在MySQL 4.0.21标准中,我有一个带日期的表,保存为字符串.
我想将此字符串与我的请求中的日期进行比较.
SELECT FE_CLIENT.*
FROM FE_CLIENT
WHERE D_DATFINPUBLI < '2010/06/03'
Run Code Online (Sandbox Code Playgroud)
如何将我的列date_deb转换为比较日期?
我的背景一般是新技术演示者,这些......很好地展示了最新技术以及它如何对客户公司有用.他们将它用于内部演示等.
现在,我的职业生涯对实际产品更加苛刻,特别是在博物馆等地方作为互动作品运行的软件.
很明显,虽然技术演示者必须编码良好等等,但没有像我目前的工作那样强调,它必须工作,高度可配置,可能是多功能的并且不断重复运行.
所以我的问题是,既然我正在努力提高我的编码质量并编写更多商业应用程序,那么是否有任何书籍可以讨论围绕高质量商业软件的问题?
我目前有一份Code Complete第2版的副本,这是非常好的,但只是想知道是否有更好的,可能更集中的标题?
非常感谢!
安迪.
**更新**
在JosephH的建议之后,我将主要使用c#和.Net(可能是silverlight!),如果这有助于任何人!:)
如何在Perl中匹配shell风格的字符串?例如:
foo*
{bar,baz}.smth
joe?
foobar[0-9]
Run Code Online (Sandbox Code Playgroud) 我正在使用存储在XML文件中的数据模型.我想为模型创建一些元数据并将其存储在一起,但我希望能够区分这两者.数据模型会不时导入某些软件,我们不希望它尝试导入元数据文件.
为了解决这个问题,我一直在考虑为元数据xml文件(比如.mdml)创建一个新的扩展.这是好习惯吗?
我尝试用Java实现OAuth的编程思想,但我失败了.我不知道为什么,但我的代码不起作用.每次运行程序时,都会抛出IOException,原因是"java.io.IOException:服务器返回HTTP响应代码:401"(401表示未经授权).我仔细查看了文档,但我真的不明白为什么它不起作用.我想要使用的OAuth提供程序是twitter,我也在那里注册了我的应用程序.
在此先感谢
phineas
OAuth docs
Twitter API wiki
Class Base64Coder
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.OutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLEncoder;
import java.net.URLConnection;
import java.net.MalformedURLException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;
public class Request {
public static String read(String url) {
StringBuffer buffer = new StringBuffer();
try {
/**
* get the time - note: value below zero
* the millisecond value is used for oauth_nonce later on
*/
int millis = (int) System.currentTimeMillis() * …Run Code Online (Sandbox Code Playgroud)