我正在使用一个非常简单的sed脚本删除注释: sed -e 's/--.*$//'
它非常有用,直到评论中出现非ascii字符,例如:-- °.此行与正则表达式不匹配,未替换.
知道如何.真正匹配任何角色吗?
方案:
由于file它是iso8859文本,LANG因此在调用之前必须更改变量环境sed:
LANG=iso8859 sed -e 's/--.*//' -
我有一个C代码,我在ctype.h中使用标准库函数isalpha(),这是在Visual Studio 2010-Windows上.在下面的代码中,如果char c为'£',则isalpha调用将返回一个断言,如下面的快照所示:
char c='£';
if(isalpha(c))
{
printf ("character %c is alphabetic\n",c);
}
else
{
printf ("character %c is NOT alphabetic\n",c);
}
Run Code Online (Sandbox Code Playgroud)
我可以看到这可能是因为8位ASCII没有这个字符.
那么如何处理ASCII表外的非ASCII字符呢?
我想要做的是,如果找到任何非字母字符(即使它包含不在8位ASCII表中的字符),我希望能够忽略它.
我正在寻找一个方法或转换表,知道如何将变音符号和特殊字符转换为ascii中最可能的表示形式.
例:
Ärger = aerger
Bôhme = bohme
Søren = soeren
pjérà = pjera
Run Code Online (Sandbox Code Playgroud)
有人有什么想法?
更新:除了良好的接受答案,我还发现PECLs Normalizer非常有趣,虽然我不能使用它,因为服务器没有它并且没有为我更改.
如果此处的答案对您没有帮助,请查看此问题.
php ascii diacritics special-characters non-ascii-characters
我正在尝试在HTTP服务器上实现RFC 2388以支持多部分POST.
我正在专门针对content-disposition的"name"参数查看规范.
根据RFC 2388第3节,它规定:
最初在非ASCII字符集中的字段名称可以使用RFC 2047中描述的标准方法在"name"参数的值内编码.
我'听说'UA目前在表单控件名称上不支持RFC2047.他们只需以原始编码发送文本.(即如果表单控件的名称是使用UTF-8的日语,它将发送带有UTF-8的日文文本的多部分POST请求)
但是,为了"忠实",这有一天会得到解决.我更喜欢坚持使用RFC.
但问题来自RFC 2047本身.根据第5(3)条规定:
- '编码字'不得出现在'addr-spec'的任何部分.
- "编码字"绝不能出现在"引用字符串"中.
- "编码字"不得在"已接收"标题字段中使用.
- "编码字"不得用于MIME内容类型或内容处置字段的参数,也不得用于"评论"或"短语"中的任何结构化字段正文中.
冲突发生在第4点.鉴于'name'参数是"content-disposition"字段的一部分.我发现自己迷失了规范要求我们实现者做什么.
无论什么在"现实"中起作用/不起作用.我想问一下是否有人发现这也是冲突.
我发现自己也在问为什么RFC 2388仍然将RFC 2047称为"name"参数,但稍后只有几段后面将RFC 2231称为"filename"参数的编码规范.鉴于RFC 2047不能用于"参数值",这就是显然创建RFC 2231的原因.RFC 2388是否也没有更新,因此"name"参数使用RFC 2231.
最重要的是,我应该或者不应该为实现RFC 2388的功能而实施RFC 2047 AT ALL而烦恼吗?我是否还应该为RFC 2231打扰'filename'参数?有人知道任何UA目前是否使用RFC 2231来上传非ascii文件名?
我有三个字符(大于127),我需要在二进制文件中写它.
出于某种原因,MATLAB和PHP/Python倾向于编写不同的字符.
对于Python,我有:
s = chr(143)+chr(136);
f = open('pythonOut.txt', 'wb');
f.write(s);
f.close();
Run Code Online (Sandbox Code Playgroud)
对于MATLAB,我有:
s = strcat(char(143),char(136));
fid = fopen('matlabOut.txt');
fwrite(fid, s, 'char');
fclose(fid);
Run Code Online (Sandbox Code Playgroud)
当我比较这两个文件时,它们是不同的.(使用diff和/或cmp命令).
更多,当我这样做
disp(char(hex2dec('88'))) //MATLAB prints
print chr(0x88) //PYTHON prints ˆ
Run Code Online (Sandbox Code Playgroud)
两种产出都不同.我想让我的MATLAB代码与Python相同.MATLAB代码有什么问题?
我有两个文件夹,Folder和Folderé.第二个不能被PHP捕获.
这是我的测试:
<?php
$dir = 'D:\wamp\www\test\data\Folder';
var_dump(file_exists($dir)); // true
$dir = 'D:\wamp\www\test\data\Folderé';
var_dump(file_exists($dir)); // false
?>
Run Code Online (Sandbox Code Playgroud)
怎么解决?
所以我想对齐包含非ascii字符的字段.以下似乎不起作用:
for word1, word2 in [['hello', 'world'], ['?????', '??']]:
print "{:<20} {:<20}".format(word1, word2)
hello world
????? ??
Run Code Online (Sandbox Code Playgroud)
有解决方案吗?
python unicode string-formatting non-ascii-characters python-2.7
我从PHP手册的"字符串类型"页面的详细信息中看到以下文本:
鉴于PHP没有规定字符串的特定编码,人们可能想知道字符串文字是如何编码的.字符串将以脚本文件中编码的任何方式进行编码.因此,如果脚本是用ISO-8859-1编写的,则字符串将以ISO-8859-1编码,依此类推.但是,如果启用了Zend Multibyte,则不适用; 在这种情况下,脚本可以用任意编码(明确声明或检测到)编写,然后转换为某种内部编码,然后编码将用于字符串文字.请注意,对脚本的编码存在一些限制(或者在内部编码上,如果启用了Zend Multibyte) - 这几乎总是意味着此编码应该是ASCII的兼容超集,例如UTF-8或ISO-8859 -1.
所以我的疑问是,PHP中的字符串文字只能编码为ASCII的兼容超集编码,例如UTF-8或ISO-8859-1,而不是编码不兼容的超集的ASCII?
是否有可能以编码在PHP字符串文字在一些非ASCII兼容像编码UTF-16,UTF-32或一些其它这样的非ASCII兼容编码?如果是,那么在这种非ASCII兼容编码中编码的字符串文字是否可以与mb_string_*函数一起使用?如果不是,那是什么原因?
假设,Zend Multibyte已启用,我已将内部编码设置为兼容的ASCII超集,例如UTF-8或ISO-8859-1或其他一些非ASCII兼容编码.现在,我可以在脚本文件中声明不是ASCII 兼容超集的编码,例如UTF-16或UTF-32吗?
如果是,那么在这种情况下编码字符串文字的编码是什么?如果不是,那是什么原因?
另外,如果启用了Zend Multibyte,请解释一下这个编码对于字符串文字是如何工作的?
如何启用Zend Multibyte?背后有什么把它的主要意图在?当需要把它在?
如果你能用合适的例子清楚我的怀疑,那会更好.
谢谢.
我正在尝试找到一种使用 Powershell 脚本执行以下操作的方法。
\n\n我所说的非 ASCII 字符是指非键盘字符,例如重音字符、其他语言的字符等。
\n\n样本数据
\n\n - \xe5\xbc\xa0\xe4\xbc\x9f\n - \xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb4\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xaf\x88\xe0\xae\x95\xe0\xae\xb3\xe0\xaf\x81\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xbe\xe0\xae\xa9 \xe0\xae\xaa\xe0\xaf\x86\xe0\xae\xaf\xe0\xae\xb0\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xb3\xe0\xaf\x8d\n - \xe6\x97\xa5\xe6\x9c\xac\xe4\xba\xba\xe3\x81\xae\xe6\xb0\x8f\xe5\x90\x8d\n - Full Name\n - L\xc3\xa9na R\xc3\xa9mi\nRun Code Online (Sandbox Code Playgroud)\n\n输出数据
\n\n - \xe5\xbc\xa0\xe4\xbc\x9f\n - \xe0\xae\x95\xe0\xaf\x81\xe0\xae\xb4\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xaf\x88\xe0\xae\x95\xe0\xae\xb3\xe0\xaf\x81\xe0\xae\x95\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xbe\xe0\xae\xa9 \xe0\xae\xaa\xe0\xaf\x86\xe0\xae\xaf\xe0\xae\xb0\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xb3\xe0\xaf\x8d\n - \xe6\x97\xa5\xe6\x9c\xac\xe4\xba\xba\xe3\x81\xae\xe6\xb0\x8f\xe5\x90\x8d\n - L\xc3\xa9na R\xc3\xa9mi\nRun Code Online (Sandbox Code Playgroud)\n\n我在其他线程中发现了正则表达式来删除非 ASCII 字符,但我似乎无法使其工作。
\n\n请帮忙!
\n\n** 编辑 **\n感谢大家的帮助!我已经成功地用下面的脚本做了我想做的事情。
\n\n$nonASCII = "[^\\x00-\\x7F]"\nforeach ($_ in [System.IO.File]::ReadLines($source)){\n if ($_ -cmatch $nonASCII){\n write-output $_ | out-File $output -append \n }\n}\nRun Code Online (Sandbox Code Playgroud)\n