标签: character-encoding

Perl正则表达式替换为UTF-8字符

我对我尝试写的函数感到绝望Perl.我的功能是过滤特定字符的字符串.我允许一些角色A-Z, a-z, 0-9,我想也允许一些德国变形金刚.但每次我在正则表达式中定义它们时,替换都会失败.

我的编码是UTF-8(server,perl,scripts).

这是我的功能:

sub cleanXSS{

    my $string = shift;

    $string =~ s/[^A-Za-z0-9öäü]//g;

    return $string;
}
Run Code Online (Sandbox Code Playgroud)

我的脚本看起来像这样:

my $scalar = "áéíóúÁÉÍüÓÚâêÄîôßû()ÂÊÎÔÛabcäüöÄÜÖý#µzdjheäöü";
print cleanXSS($scalar)."\n";
Run Code Online (Sandbox Code Playgroud)

因此它应该替换除A-Z, a-z, 0-9小写变音符号以外的所有字符.在我的测试字符串中替换德语变音符合工作正常,但似乎所有其他拉丁字符只是部分替换.

控制台输出如下所示:

?????????ü??????????????abcäüö????zdjheäöü
Run Code Online (Sandbox Code Playgroud)

我尝试过很多解决方法,比如"使用locale",其他编码,通过"使用Encode"进行显式编码等等.

似乎在一个字符中,á只替换了2个字节中的1个.如果我将我的替换更改为:

$string =~ s/[^A-Za-z0-9öäü]/_/g;
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

?_?_?_?_?_ö?_?_?_ü?_?_?_?_?_?_?_?_?___?_?_?_?_?_abcäüö?_?_?_?____zdjheäöü
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

regex perl utf-8 diacritics character-encoding

0
推荐指数
1
解决办法
5447
查看次数

如何在html中显示</ title>作为标题?

如何设置html页面的标题</title>

我已经试过了&gt;,&lt;但它不起作用.

html html5 escaping character-encoding

0
推荐指数
1
解决办法
334
查看次数

lxml LookupError:未知编码:'uft-8'

这是一个非常奇怪的错误,让我们看一下细节:

ts.py文件:

#-*- coding: utf-8 -*-
import requests
from lxml import html

headers = {
          'Host':'www.baidu.com',
          'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36',
          }

def get_html(url,enable_proxy=None):
    r = requests.get(url,headers=headers)
    parser = html.HTMLParser(encoding='utf-8')
    return html.document_fromstring(r.text, parser=parser)

p = get_html('http://www.baidu.com')

print p.xpath(u'//*[@id="setf"]/text()')[0].encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

如果我只执行ts.py,lxml就可以完美运行.

但是!当我get_html输入另一个文件时出现错误,请参阅以下内容:

ts.py:

#-*- coding: utf-8 -*-
import requests
from util import get_html

p = get_html('http://www.baidu.com')
print p.xpath(u'//*[@id="setf"]/text()')[0].encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

util.py:

#-*- coding: utf-8 -*-
import requests
from lxml import html

headers = {
          'Host':'www.baidu.com',
          'User-Agent':'Mozilla/5.0 …
Run Code Online (Sandbox Code Playgroud)

python lxml utf-8 character-encoding python-2.7

0
推荐指数
1
解决办法
6046
查看次数

Java中字节数组的char操作

我有一个"包含"文本的字节数组 - 此时编码/字符集是未知的.

如何在不从字节数组创建String对象的情况下删除空格,\n,\ r \n字符?

目标是将字节数组显示为文本,并使用用户指定的字符集,只是没有这些空格,\n,\ r \n字符.

java character-encoding character-arrays

0
推荐指数
1
解决办法
145
查看次数

Perl和HTML:UTF8在表单中不起作用

我试图将我的Perl/HTML文件更改为UTF-8格式.不幸的是我的表格有问题.我创建了一个小测试脚本来举例说明问题.它所做的只是重新加载,以便输入的文本将再次显示.它适用于ASCII字符.一进入德语"Umlaute"(ÄÖÜ),角色就会变形.它也无法处理俄语字符(ЭЯЮ).这是脚本:

#!/usr/bin/perl

use utf8;
use Encode;
use open ':std', ':encoding(UTF-8)';

# Safe query-string in hash:
$querystring = $ENV{ 'QUERY_STRING' };
read(STDIN, $poststring, $ENV{CONTENT_LENGTH});
if (($querystring ne "") && ($poststring ne "")) { $querystring .= "&$poststring"; } 
    else { $querystring .= $poststring; }

$querystring =~ s/&/=/gi;
%query = split( /=/, $querystring );
foreach $key ( keys( %query ) ) {
    $query{$key} =~ tr/+/ /;
    $query{$key} =~ s/%([\da-f][\da-f])/chr( hex($1) )/egi;
    $uquer{$key} = decode_utf8( $query{$key} );
}

print "Content-Type: text/html; charset=\"UTF-8\"\n\n";
print <<END; …
Run Code Online (Sandbox Code Playgroud)

html perl utf-8 character-encoding

0
推荐指数
1
解决办法
577
查看次数

python中的字符编码将'u2019'替换为'

我已尝试过多种方法将其编码为最终结果"BACK RUSHIN'",最重要的字符是右撇号'.

我想要一种方法来使用Python中的一些内置函数来获得最终结果,其中正常字符串和unicode字符串之间没有区别.

这是我用来检索字符串的代码: str(unicode(etree.tostring(root.xpath('path')[0],method='text', encoding='utf-8'),errors='ignore')).strip()

结果是:缺少'BACK RUSHIN'撇号的东西'.

另一种方式是: root.xpath('path/text()')

结果是:u'BACK RUSHIN\u2019'在python中.

最后,如果我尝试: u'BACK RUSHIN\u2019'.encode('ascii', 'replace')

结果是: 'BACK RUSHIN?'

请不要替换函数,我想利用pythons编解码库.也没有打印字符串,因为它被保存在变量中.

谢谢

python unicode lxml character-encoding python-2.7

0
推荐指数
1
解决办法
5548
查看次数

python:unicode函数vs u前缀

UnicodeEncodeError在我的Django项目中遇到了麻烦,最后通过更改故障__unicode__方法的返回值来解决问题(经过多次挫折)

return unicode("<span><b>{0}</b>{1}<span>".format(val_str, self.text))
Run Code Online (Sandbox Code Playgroud)

return u"<span><b>{0}</b>{1}<span>".format(val_str, self.text)
Run Code Online (Sandbox Code Playgroud)

但我很困惑为什么这样做(或者更确切地说,为什么首先出现问题).做u前缀和unicode功能做不一样的事?在控制台中尝试时,它们似乎给出了相同的结果:

# with the function
test = unicode("<span><b>{0}</b>{1}<span>".format(2,4))
>>> test
u'<span><b>2</b>4<span>'
>>> type(test)
<type 'unicode'>

# with the prefix
test = u"<span><b>{0}</b>{1}<span>".format(2,4)
>>> test
u'<span><b>2</b>4<span>'
>>> type(test)
<type 'unicode'>
Run Code Online (Sandbox Code Playgroud)

但似乎编码在某种程度上以不同的方式完成,具体取决于使用的内容.这里发生了什么?

python unicode string-formatting character-encoding

0
推荐指数
1
解决办法
243
查看次数

PHPmailer西里尔字符集麻烦

我认为我做的事情正确:

  • 我指定了PHPMailer对象的字符集: $mail->CharSet = "UTF-8";
  • 邮件正文和php脚本的字符集也是UTF-8

但是电子邮件到来时会出现这种错误(单词被带有“?”符号的黑色四分之一字符打破:

更新1

在电子邮件的来源中找到了某种中文字形(但没有cyrillyc符号)

php character-encoding phpmailer cyrillic

0
推荐指数
1
解决办法
1381
查看次数

将字符串从一个字符集转换为另一个字符集

我正在努力将字符串从一个字符集转换为另一个字符串,并在其上阅读许多示例,最后找到下面的代码,这对我来说很好,作为Charset Encoding的新手,我想知道,如果这是正确的方法它.

public static byte[] transcodeField(byte[] source, Charset from, Charset to) {
    return new String(source, from).getBytes(to);
} 
Run Code Online (Sandbox Code Playgroud)

要将String从ASCII转换为EBCDIC,我必须这样做:

System.out.println(new String(transcodeField(ebytes,
                Charset.forName("US-ASCII"), Charset.forName("Cp1047"))));
Run Code Online (Sandbox Code Playgroud)

要从EBCDIC转换为ASCII,我必须这样做:

System.out.println(new String(transcodeField(ebytes,
                Charset.forName("Cp1047"), Charset.forName("US-ASCII"))));
Run Code Online (Sandbox Code Playgroud)

java ascii character-encoding ebcdic

0
推荐指数
1
解决办法
8031
查看次数

我应该使用哪个charset来解码java中的这个字节数组?

我目前正在使用Soap Web服务,更准确地说,是恢复发送的文件.

它是手动工作:

在SOAPUi中,我确实收到了这个(为了便于阅读而被截断)

JVBERi0xLjQKJeLjz9MKMTIgMCBVY [...]
dL0luZm8gMTggMCBSL1NpemUgMTk + PgpzdGFydHhyZWYKNjk5OQolJUVPRgo =

我可以在notepad ++中粘贴此字符串,然后在单击MIME Tools> base 64 Decode之后,它将成为一个正确的PDF文件,如下所示(截断,只显示标题)

%PDF-1.4%xE2xE3xCFxD3LF 12 0 obj <> stream

因此可以毫无问题地读取PDF文件.

现在问题是使用java恢复这些数据.我收到一个byte数组(下面的示例中的acopier变量)并使用以下代码存储到文件中.我尝试了在网上找到的众多例子中没有任何成功.

还尝试使用UTF-8,ISO-8859-1等.

OutputStreamWriter osw = null;
    try{
    String filePath="c:\\temp\\";
    filePath = filePath.concat("test.pdf");
    FileOutputStream fos = new FileOutputStream(filePath,false);
    osw = new OutputStreamWriter(fos,"UTF-8");
    osw.write("\uFEFF");
    osw.write(new String(acopier));
    osw.close();
    System.out.println("Success");
    fos.close();
    }
    catch(Exception e)
    {
    System.out.println(e.getMessage());
    osw.close();
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,文件不能被视为pdf文件,

%PDF-1.4%ãÏÓ120 ob​​j <>流

当我试图检查字节数组中的内容时,控制台向我显示:(截断)

%PDF - 1.4

%????

1 2 0

我认为windows或记事本++或者soapui正在后台做一些事情来猜测要使用什么字符集,但我不知道有什么方法可以去.

可以请有人澄清我如何从头开始在java(意味着从原始的字节数组)?

问候,

皮埃尔

java pdf base64 utf-8 character-encoding

0
推荐指数
1
解决办法
1016
查看次数