我需要一些帮助来理解 unicode 包的 RangeTable .
使用这个(据说有帮助的)功能:
func printChars(ranges []unicode.Range16) {
for _, r := range ranges {
if r.Hi >= 0x80 { // show only ascii
break
}
fmt.Println("\nLo:", r.Lo, "Hi:", r.Hi, "Stride:", r.Stride)
for c := r.Lo; c <= r.Hi; c++ {
fmt.Print(string(c) + " ")
}
}
fmt.Println()
}
对于数字,我可以执行 printChars(unicode.Digit.R16),数字序列对我来说很有意义。
// Lo: 48 Hi: 57 Stride: 1
// 0 1 2 3 4 5 6 7 8 9
但是,要获取标点符号 printChars(unicode.Punct.R16) 结果为
// Lo: 33 Hi: 35 Stride: 1
// ! " #
// Lo: 37 Hi: 42 Stride: 1
// % & ' ( ) *
// Lo: 44 Hi: 47 Stride: 1
// , - . /
// Lo: 58 Hi: 59 Stride: 1
// : ;
// Lo: 63 Hi: 64 Stride: 1
// ? @
// Lo: 91 Hi: 93 Stride: 1
// [ \ ]
// Lo: 95 Hi: 123 Stride: 28
// _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z {
令我惊讶的是小写字母也包含在内。另外,“步”是什么意思?除最后一个外,其余均为 1,但 hi-lo 差异各不相同。
再举一个例子,printChars(unicode.Pe.R16)。我认为这应该只给出结束标点符号:
而是我的函数打印
// Lo: 41 Hi: 93 Stride: 52
// ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ]
大概我完全误解了它的工作方式。
我如何才能正确获取给定类别中的字符列表,例如上面的标点符号结尾 (Pe)?
最佳答案
步幅是您必须在范围内迭代的步长。让我们稍微提高 0x80 的边界,并使用 Stride 使循环迭代:
package main
import (
"fmt"
"unicode"
)
func printChars(ranges []unicode.Range16) {
for _, r := range ranges {
if r.Hi >= 0x100 {
break
}
fmt.Println("\nLo:", r.Lo, "Hi:", r.Hi, "Stride:", r.Stride)
for c := r.Lo; c <= r.Hi; c+=r.Stride {
fmt.Print(string(c) + " ")
}
}
fmt.Println()
}
func main() {
printChars(unicode.Punct.R16)
}
这是输出:
% go run main.go
Lo: 33 Hi: 35 Stride: 1
! " #
Lo: 37 Hi: 42 Stride: 1
% & ' ( ) *
Lo: 44 Hi: 47 Stride: 1
, - . /
Lo: 58 Hi: 59 Stride: 1
: ;
Lo: 63 Hi: 64 Stride: 1
? @
Lo: 91 Hi: 93 Stride: 1
[ \ ]
Lo: 95 Hi: 123 Stride: 28
_ {
Lo: 125 Hi: 161 Stride: 36
} ¡
Lo: 167 Hi: 171 Stride: 4
§ «
Lo: 182 Hi: 183 Stride: 1
¶ ·
Lo: 187 Hi: 191 Stride: 4
» ¿
在我看来非常正确。
关于unicode - unicode.RangeTable 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20176024/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/