求大神帮我把龙王传说顶点那个图标去掉

博客访问: 944152
博文数量: 247
博客积分: 5909
博客等级: 大校
技术积分: 2675
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串,
perl管它叫string. 也就是说: Perl只熟悉两种编码: Ascii(octets)和utf8(string).utf8 flag在perl内部, 字符串结构由两部分组成: 数据和utf8 flag. 比如字符串"中国"在perl内部的存储是这样:utf8 flag 数据On 中国假如utf8 flag是On的话, perl就会把中国当成utf8字符串来处理, 假如utf8 flag为Off, perl就会把他当成octets来处理. 所有字符串相关的函数包括正则表达式都会受utf8 flag的影响. 让我们来看个例子:程序代码:use Emy $str = "中国";Encode::_utf8_on($str);print length($str) . "\n";Encode::_utf8_off($str);print length($str) . "\n";运行结果是:程序代码:26这里我们使用Encode模块的_utf8_on函数和_utf8_off函数来开关字符串"中国"的utf8 flag. 可以看到, utf8
flag打开的时候, "中国"被当成utf8字符串处理, 所以其长度是2. utf8 flag关闭的时候,
"中国"被当成octets(字节数组)处理, 出来的长度是6(我的编辑器用的是utf8编码, 假如你的编辑器用的是gb2312编码,
那么长度应该是4).再来看看正则表达式的例子:程序代码:use Emy $a = "china----中国";my $b = "china----中国";Encode::_utf8_on($a);Encode::_utf8_off($b);$a =~ s/\W //g;$b =~ s/\W //g;print $a, "\n";print $b, "\n";运行结果:程序代码:Wide character in print at unicode.pl line 10.china中国china结果第一行是一条警告, 这个我们稍后再讨论. 结果的第二行说明, utf8 flag开启的情况下, 正则表达式中的\w能够匹配中文, 反之则不能.如何确定一个字符串的utf8 flag是否已开启? 使用Encode::is_utf8($str). 这个函数并不是用来检测一个字符串是不是utf8编码, 而是仅仅看看它的utf8 flag是否开启.eq是一个字符串比较操作符, 只有当字符串的内容一致并且utf8 flag的状态也是一致的时候, eq才会返回真.unicode转码假如你有一个字符串"中国", 它是gb2312编码的. 假如它的utf8 flag是关闭的, 它就会被当成octets来处理,
length()会返回4, 这通常不是你想要的. 而假如你开启它的utf8 flag, 则它会被当做utf8编码的字符串来处理.
由于它本来的编码是gb2312的, 不是utf8的, 这就可能导致错误发生. 由于gb2312和utf8内码范围部分重叠, 所以很多时候,
不会有错误报出来, 但是perl可能已经错误地拆解了字符. 严重的时候, perl会报警, 说某个字节不是合法的utf8内码.解决的方法很显然, 假如你的字符串本来不是utf8编码的, 应该先把它转成utf8编码, 并且使它的utf8 flag处于开启状态. 对于一个gb2312编码的字符串, 你可以使用程序代码:$str = Encode::decode("gb2312", $str);来将其转化为utf8编码并开启utf8 flag. 假如你的字符串编码本来就是utf8, 只是utf8 flag没有打开, 那么你可以使用以下三种方式中的任一种来开启utf8 flag:程序代码:$str = Encode::decode_utf8($str);$str = Encode::decode("utf8", $str);Encode::_utf8_on($str);最后一种方式效率最高, 但是官方不推荐. 以下划线开头的函数是内部函数, 出于礼貌, 一般不从外部调用.字符串连接.
是字符串连接操作符. 连接两个字符串时, 假如两个字符串的utf8 flag都是Off, 那么结果字符串也是Off.
假如其中任何一个字符串的utf8 flag是On的话, 那么结果字符串的utf8 flag将是On. 连接字符串并不会改变它们原来的编码,
所以假如你把两个不同编码的字符串连在一起, 那么以后不管对这个字符串怎么转码, 都总会有一段是乱码. 这种情况一定要避免,
连接两个字符串之前应该确保它们编码一致. 如有必要, 先进行转码, 再连接字符串.perl unicode编程基本原则对于任何要处理的unicode字符串, 1)把它的编码转换成utf8; 2)开启它的utf8 flag字符串来源为了应用上面说到的基本原则, 我们首先要知道字符串本来的编码和utf8 flag开关情况, 这里我们讨论几种情况.1)
命令行参数和标准输入. 从命令行参数或标准输入(STDIN)来的字符串, 它的编码跟locale有关.
假如你的locale是zh_CN或zh_CN.gb2312, 那么进来的字符串就是gb2312编码, 假如你的locale是zh_CN.gbk,
那么进来的编码就是gbk, 假如你的编码是zh_CN.UTF8, 那进来的编码就是utf8. 不管是什么编码, 进来的字符串的utf8
flag都是关闭的状态.2) 你的源代码里的字符串. 这要看你编写源代码时用的是什么编码. 在editplus里,
你可以通过"文件"->"另存为"查看和更改编码. 在linux下, 你可以cat一个源代码文件, 假如中文正常显示,
说明源代码的编码跟locale是一致的. 源代码里的字符串的utf8 flag同样是关闭的状态.假如你的源代码里含有中文, 那么你最好遵循这个原则: 1) 编写代码时使用utf8编码, 2)在文件的开头加上use utf8;语句. 这样, 你源代码里的字符串就都会是utf8编码的, 并且utf8 flag也已经打开.3) 从文件读入. 这个毫无疑问, 你的文件是什么编码, 读进来就是什么编码了. 读进来以后, utf8 flag是off状态.4) 抓取网页. 网页是什么编码就是什么编码, utf8 flag是off状态. 网站的编码可以从响应头里或者html的";eval {my $str2 = $ Encode::decode("gbk", $str2, 1)};print "not gbk: $@\n" if $@;eval {my $str2 = $ Encode::decode("utf8", $str2, 1)};print "not utf8: $@\n" if $@;eval {my $str2 = $ Encode::decode("big5", $str2, 1)};print "not big5: $@\n" if $@;输出:程序代码:not utf8: utf8 "\xD0" does not map to Unicode at /usr/local/lib/perl/5.8.8/Encode.pm line 162.not big5: big5-eten "\xC8" does not map to Unicode at /usr/local/lib/perl/5.8.8/Encode.pm line 162.我们给decode函数传递了第三个参数, 要求有异常字符的时候报错. 我们用eval捕捉错误, 转码失败说明字符串本来不是这种编码.
另外注重我们每次都把$str拷贝到$str2, 这是因为decode第三个参数为1时, decode以后,
传给它的字符串参数(第二个参数会被清空). 我们拷贝一下, 这样每次被清空的都是$str2, $str不变.来看结果, 既然不是utf8, 也不是big5, 那就应该是gbk了. 对于其他不知编码的字符串, 也可以使用这种方法来猜. 不过因为几种编码的内码范围都差不多, 所以假如字符串比较短, 就可能出不了异常字符, 所以这个方法只适用于大段的文字.输出字符串在程序内被正确地处理后, 要展现给用户. 这时我们需要把字符串从perl internal form转化成用户能接受的形式. 简单地说,
就是把字符串从utf8编码转换成输出的编码或表现界面的编码. 这时候, 我们使用$str = Encode::encode(charset,
$str);. 同样可以分为几种情况.1) 标准输出. 标准输出的编码跟locale一致. 输出的时候utf8 flag应该关闭, 不然就会出现我们前面看到的那行警告:程序代码:Wide character in print at unicode.pl line 10.2) GUI程序. 这个应该是不用干什么, utf8编码, utf8 flag开启就行. 没有实际测试过.3) 做http post. 看网页表单要求什么编码. utf8 flag开或关无所谓, 因为http post发送出去的只是字符串中的数据部分, 不管utf8 flag.PerlIOPerlIO为我们的输入/输出转码提供了便利. 它可以针对某个文件句柄, 输入的时候自动帮你转码并开启utf8 flag, 输出的时候, 自动帮你转码并关闭utf8 flag. 假设你的终端locale是gb2312, 看下面的例子:程序代码:binmode(STDIN, ":encoding(gb2312)");binmode(STDOUT, ":encoding(gb2312)");while () {print $_, length, "\n";}运行后输入"中国", 结果:程序代码:中国2这样我们就省去了输入和输出时转码的麻烦. PerlIO可以作用于任何文件句柄, 具体请参考perldoc PerlIO.相关API都是Encode模块的:$octets = encode(ENCODING, $string [, CHECK]) 把字符串从utf8编码转成指定的编码, 并关闭utf8 flag.$string
= decode(ENCODING, $octets [, CHECK]) 把字符串从其他编码转成utf8编码, 并开启utf8 flag,
不过有个例外就是, 假如字符串是仅仅ascii编码或EBCDIC编码的话, 不开启utf8 flag.is_utf8(STRING [, CHECK]) 看看utf8 flag是否开启. 假如第二个参数为真, 则同时检查编码是否符合utf8. 这个检测不一定准确, 跟decode方式检测效果一样._utf8_on(STRING) 打开字符串的utf flag_utf8_off(STRING) 关闭字符串的utf flag最后两个是内部函数, 不推荐使用.参考perldoc Encode.utf8和utf-8前面我们提到的一直都是utf8. 在perl中, utf8和utf-8是不一样的. utf-8是指国际上标准的utf-8定义,
而utf8是perl在国际标准上做了一些扩展, 能兼容的内码要比国际标准的多一些. perl internal form使用的是utf8.
另外顺便提一下, 字符集的名称是不区分大小写的并且"_"和"-"是等价的.EBCDIC是一套遗留的宽字符解决方案, 不同于unicode, 它不是Ascii的超集. 上面介绍的方案并不完全适用于EBCDIC. 关于EBCDIC, 请参考perldoc perlebcdic.
阅读(5436) | 评论(0) | 转发(3) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。如何获取真正的系统编码(系统里面文件名的编码) - ITeye问答
System.getProperty("file.encoding"));& //显然不对的,这个获取的是入口程序的“源文件编码”,我这里,main的文件是utf-8的,所以总是utf-8,我是win7中文系统
Charset.defaultCharset().name(); // 同样不行,返回utf-8
然后,我还测试了inputstream和outputstream的编码,返回的默认值都是utf-8
我究竟要如何才能在这种情况下获取我的系统编码gb18030啊?
(主要是用于打包中文文件的,想自动识别系统编码,因为开发在windows,运行在linux)
你可以这样在java里面去调用windows或者Linux系统命令:
Window 上和 Linux 上:
Runtime.getRuntime().exec(command)
比如:
Runtime.getRuntime().exec("ls");
然后就可以得到系统的编码:
Runtime.getRuntime().exec("env&& |grep&& LANG");
已解决问题
未解决问题小木虫 --- 600万学术达人喜爱的学术科研平台
&&查看话题
使用perl语言提取编码序列中密码子三个位点的GC含量
这个问题具体描述如下:我有一系列CDS序列(ATG开头,终止密码子结尾)。我现在想用perl或bioperl统计三联体密码子(每三个字母)中三个位点的GC含量(GC1,GC2,GC3)。刚接触编程语言,请大神赐予脚本。序列模板如下:
A: ATG GAA GAA GAG AAC GCG CAA CTC CGT ACC GAA TTG
B: ATG GTT TTG TCA CAA GAA AAT GTT GAT CAC AAT GAT
...........
展开阅读全文
学术科研必备,90%的学术科研者都在使用
关于使用perl语言提取编码序列中密码子三个位点的GC含量的相关话题在小木虫APP已经有16位虫友给出了详细回复。
赶快查看回复吧!
你好,谢谢你提供的代码。我是计算所有CDS序列三个位点的GC含量,我的文件是fasta格式的,应该怎么修改,还得麻烦你。谢谢。:)我刚开始的时候也像你一样迷茫,同学给我推荐了,上面很多牛人分享的科研经验,对新手很有帮助,你也可以下载来试试!
我写的那个就是先计算所有CDS的三个位点的GC碱基总数和ATCG碱基总数,然后两者相除*100,得到三个位点的GC含量。
如果你想得到每个CDS的三个位点GC含量,可以按我后来补充的回复里提到的修改方法,如果你看不明白,我再帮你改一下
我是想计算每一条CDS密码子三个位点的GC含量,用下面这个脚本但没有数据输出,请给看一看,还有就是,我的文本是fasta格式的,文件名是M.fasta,fasta结构的文本是以下形式:
ATG GAA GAA GAG AAC GCG CAA CTC CGT ACC GAA TTG
ATG GTT TTG TCA CAA GAA AAT GTT GAT CAC AAT GAT
“&&$li=~s/^\w+://;& && &&&# 去除每条序列前的序列编号和冒号”怎么修改?
#!/usr/bin/perl
&&if($_ eq &G& or $_ eq &C&) {
my $input=$ARGV;
my ($li,$i,$len,$s,$tm,@t,@g);
open TMP, $M.fasta||
while($li=&TMP&) {
& & & && &my @g;
& & #print &$li\n&;
&&$li=~s/^\w+://;& && &&&# 去除每条序列前的序列编号和冒号
&&$li=~s/\s//g;
&&#print &$li\n&;
&&$len=length $
&&while($i&$len) {
& & $s=substr($li,$i,1);
& && &&&$y=$i%3;& && &&&# 判断是三个位点中的哪个
& && &&&$t++;& && &&&# 该位点的总碱基数目
& && &&&$g+=gc($s);& && &&&# 该位点的GC碱基数目
& && &&&$i++;
&&$tm=$g/$t*100;
printf &The GC content in site1 is %.3f\%\n&,$
$tm=$g/$t*100;
printf &The GC content in site2 is %.3f\%\n&,$
$tm=$g/$t*100;
printf &The GC content in site3 is %.3f\%\n&,$
close TMP;
修改后的代码如下(该版本不用你在脚本名后面输入参数M.fasta了,结果在output.txt里;请注意M.fasta里的每条序列的所有碱基必须在同一行内,如果不是,需要先转化一下):
#!/usr/bin/perl
&&if($_ eq &G& or $_ eq &C&) {
my $input=&M.fasta&;& & & & # 要处理的fasta文件名
my ($li,$id,$i,$len,$s,$tm);
open TMP, $input ||
open MOUT, &&output.txt& ||
print MOUT &CDS_id\tGC1\tGC2\tGC3\n&;
while($li=&TMP&) {
&&if($li=~/\&(\w+)/) {
& & print MOUT &$1\t&;
& & & & chomp $
& & & & $li=~s/\s//g;
& & & & $len=length $
& & & & $i=0;
& & & & my (@t,@g);
& & & & while($i&$len) {
& & & & & & & & $s=substr($li,$i,1);
& & & & & & & & $y=$i%3;& & & & # 判断是三个位点中的哪个
& & & & & & & & $t++;& & & & # 该位点的总碱基数目
& & & & & & & & $g+=gc($s);& & & & # 该位点的GC碱基数目
& & & & & & & & $i++;
& & & & $tm=$g/$t*100;
& & & & printf MOUT &%.3f\t&,$
& & & & $tm=$g/$t*100;
& & & & printf MOUT &%.3f\t&,$
& & & & $tm=$g/$t*100;
& & & & printf MOUT &%.3f\n&,$
close TMP;
close MOUT;
谢谢你,完全可以运行。:hand:
http://emuch.net/bbs/viewthread.php?tid=8036340
这个问题也是我提出的,您有脚本吗?
没有脚本,内含子、外显子的问题比较复杂,得结合专业的软件比如blast什么的:o
:hand:好的,谢谢
你好,我用的也是这段代码
#!/usr/bin/perl
&&if($_ eq &G& or $_ eq &C&) {
my $input=&GP.fasta&;
my ($li,$id,$i,$len,$s,$tm);
open TMP, $input ||
open MOUT, &&output.txt& ||;
print MOUT &CDS_id\tGC1\tGC2\tGC3\n&;
while($li=&TMP&) {
&&if($li=~/\&(\w+)/) {
& & print MOUT &$1\t&;
& && &&&chomp $
& && &&&$li=~s/\s//g;
& && &&&$len=length $
& && &&&$i=0;
& && &&&my (@t,@g);
& && &&&while($i&$len) {
& && && && && & $s=substr($li,$i,1);
& && && && && & $y=$i%3;
& && && && && & $t++;
& && && && && & $g+=gc($s);
& && && && && & $i++;
& && &&&$tm=$g/$t*100;
& && &&&printf MOUT &%.3f\t&,$
& && &&&$tm=$g/$t*100;
& && &&&printf MOUT &%.3f\t&,$
& && &&&$tm=$g/$t*100;
& && &&&printf MOUT &%.3f\n&,$
close TMP;
close MOUT;
GP.fasta文件里面是
ATGATAATCGGCAGCTTACCCTCTTTTTTAGTGCCTTTGGTGGGCTTGTTTTTTCCAGCAATTACAATGCTTTTTCTTTTTTTCTATATTCAAAATGACGAAATTTTATGA
然后output.txt结果是这样的
CDS_id& & & & GC1& & & & GC2& & & & GC3
psaI& & & & 0.000& & & & 0.000& & & & 0.000
能不能指导一下?
关于使用perl语言提取编码序列中密码子三个位点的GC含量的相关话题在小木虫APP已经有16位虫友给出了详细回复。
赶快查看回复吧!
学术必备与600万学术达人在线互动!
扫描下载送金币
浏览器进程
打开微信扫一扫
随时随地聊科研&>&&>&&>&&>&perl程序实现对UTF16编码的文件转换为utf8编码文件
perl程序实现对UTF16编码的文件转换为utf8编码文件
上传大小:1KB
一些文件是uff16格式,虽然也是文本类型文件,但读取总是出现乱码,因此写了一个程序,可实现对UTF16编码的文件转换为utf8编码文件,请大家下载之前查清楚自己遇到的文件是否是utf16格式的.否则无效哦.使用方法请打开脚本里头几行有说明.
综合评分:4(2位用户评分)
所需积分:5
下载次数:11
审核通过送C币
创建者:lbingbing
创建者:reallyfly
创建者:id_rin
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
perl程序实现对UTF16编码的文件转换为utf8编码文件
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:TA的最新馆藏

我要回帖

更多关于 斗罗大陆3龙王传说 的文章

 

随机推荐