Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 您的语言在实践中对unicode的支持程度如何?_Python_Ruby_Node.js_Lisp - Fatal编程技术网

Python 您的语言在实践中对unicode的支持程度如何?

Python 您的语言在实践中对unicode的支持程度如何?,python,ruby,node.js,lisp,Python,Ruby,Node.js,Lisp,我正在寻找新的语言,有点渴望一种我不再需要担心字符集问题的语言,在一个新的项目中,我对PHP有过多的其他琐事 我倾向于认为Java过于冗长和凌乱,我不想用6英尺长的杆子触摸Windows,这就排除了.Net。这基本上除了PHP、C和C++之外,其他所有东西(除了我知道的,其中的两个与Unicode的东西不一样,不管ICU库)。 到目前为止,我已经筛选出了几种语言,即Ruby(喜欢mixin)、Python、Lisp和Javascript(node.js)。然而,我的成绩很高,我害怕(没有时间…)

我正在寻找新的语言,有点渴望一种我不再需要担心字符集问题的语言,在一个新的项目中,我对PHP有过多的其他琐事

我倾向于认为Java过于冗长和凌乱,我不想用6英尺长的杆子触摸Windows,这就排除了.Net。这基本上除了PHP、C和C++之外,其他所有东西(除了我知道的,其中的两个与Unicode的东西不一样,不管ICU库)。 到目前为止,我已经筛选出了几种语言,即Ruby(喜欢mixin)、Python、Lisp和Javascript(node.js)。然而,我的成绩很高,我害怕(没有时间…)去学习每一个,以至于我可以安全地打破它来排除它

据我所知,Python3似乎拥有它。Ruby 1.9也是如此。口齿不清。大概是Javascript

可以说,对一种语言的支持不仅仅是unicode,但根据我的经验,在处理语言环境时,它往往成为一个主要的缺点


我也意识到这个问题有点主观。(请不要因为这个原因关闭它:我实际上链接到了几个SO线程,我发现这些线程并不令人满意。)但是。。。作为这些语言的用户,它们在实践中对unicode的支持程度如何?

Perl对unicode的支持非常好。您需要知道如何正确地使用is,但我从未发现任何语言比perl具有更好的unicode支持,尤其是现在的perl5.14。

Python的unicode支持在3.x中没有真正改变。Python中的unicode支持与Python2.x基本相同,Python2.x引入了独立的
unicode
类型和编码处理。Python3.x的变化是unicode成为了唯一的字符串类型(并被重命名为
str
),而2.x有bytestring(
str
“…”
)和unicode字符串(
unicode
u“,
),它们经常但并不总是混合在一起。(允许它们混合是为了使从ByTestRing到unicode的转换更容易,但结果是一个错误。)总而言之,Python的unicode支持非常好,尽管在Python2.x中有错误。有带数字转义符和命名转义符的unicode文字、unicode文字中非ASCII字符的源代码声明、通过
编解码器
模块自动编码/解码、许多库中的unicode支持(如正则表达式和DB-API模块)以及内置unicode数据库


也就是说,为了正确处理文本,您仍然需要了解编码。您的程序将以某种编码方式接收字节(无论是来自文件、来自环境变量还是通过其他输入),它们将需要以该编码方式进行解释。如果您不知道编码(并且无法从数据中确定编码,如HTML或XML),那么您实际上只能以字节的形式处理数据。如果您确实知道编码,Python确实允许您以透明的方式处理它。

根据我个人的经验,Ruby 1.9.2在内部处理unicode非常好,除了一些奇怪的方面,如字符串类的upcase/downcase/capitalize方法。我必须为我的所有Rails应用程序重写它们。

Lisps对unicode有很强的支持。所有现代流行的Lisp(SBCL、Clozure CL、clisp)都使用UTF-32/UCS-4表示字符串,并支持UTF-8作为外部格式。

(在Lisp/Scheme阵营中)具有良好的Unicode支持。Racket将字符串(写入的
“abc”
)与字节字符串(写入的
#“abc”
)区分开来。字符串由Unicode字符组成,具有人们期望的所有Unicode感知字符串操作(比较、大小写折叠等)。默认情况下,Racket使用UTF-8进行字符串I/O(包括源文件的编码),但它也支持与其他编码之间的转换。GUI工具包使用Unicode。正则表达式也是如此。

Ruby示例:

# encoding: UTF-8
puts RUBY_VERSION  # => 1.9.2

def Σ(arr)
  arr.inject(:+)
end

Π = Math::PI
str = "abc日本def"

puts Σ [4,6,8,3]  # => 21
puts Π            # => 3.141592653589793
puts str.scan(/\p{Han}+/)  # => 日本
p Encoding.name_list # not just utf8
#["ASCII-8BIT", "UTF-8", "US-ASCII", "Big5", "Big5-HKSCS", "Big5-UAO", "CP949", "Emacs-Mule", "EUC-JP", "EUC-KR", "EUC-TW", "GB18030", "GBK", "ISO-8859-1", "ISO-8859-2", "ISO-8859-3", "ISO-8859-4", "ISO-8859-5", "ISO-8859-6", "ISO-8859-7", "ISO-8859-8", "ISO-8859-9", "ISO-8859-10", "ISO-8859-11", "ISO-8859-13", "ISO-8859-14", "ISO-8859-15", "ISO-8859-16", "KOI8-R", "KOI8-U", "Shift_JIS", "UTF-16BE", "UTF-16LE", "UTF-32BE", "UTF-32LE", "Windows-1251", "BINARY", "IBM437", "CP437", "IBM737", "CP737", "IBM775", "CP775", "CP850", "IBM850", "IBM852", "CP852", "IBM855", "CP855", "IBM857", "CP857", "IBM860", "CP860", "IBM861", "CP861", "IBM862", "CP862", "IBM863", "CP863", "IBM864", "CP864", "IBM865", "CP865", "IBM866", "CP866", "IBM869", "CP869", "Windows-1258", "CP1258", "GB1988", "macCentEuro", "macCroatian", "macCyrillic", "macGreek", "macIceland", "macRoman", "macRomania", "macThai", "macTurkish", "macUkraine", "CP950", "CP951", "stateless-ISO-2022-JP", "eucJP", "eucJP-ms", "euc-jp-ms", "CP51932", "eucKR", "eucTW", "GB2312", "EUC-CN", "eucCN", "GB12345", "CP936", "ISO-2022-JP", "ISO2022-JP", "ISO-2022-JP-2", "ISO2022-JP2", "CP50220", "CP50221", "ISO8859-1", "Windows-1252", "CP1252", "ISO8859-2", "Windows-1250", "CP1250", "ISO8859-3", "ISO8859-4", "ISO8859-5", "ISO8859-6", "Windows-1256", "CP1256", "ISO8859-7", "Windows-1253", "CP1253", "ISO8859-8", "Windows-1255", "CP1255", "ISO8859-9", "Windows-1254", "CP1254", "ISO8859-10", "ISO8859-11", "TIS-620", "Windows-874", "CP874", "ISO8859-13", "Windows-1257", "CP1257", "ISO8859-14", "ISO8859-15", "ISO8859-16", "CP878", "SJIS", "Windows-31J", "CP932", "csWindows31J", "MacJapanese", "MacJapan", "ASCII", "ANSI_X3.4-1968", "646", "UTF-7", "CP65000", "CP65001", "UTF8-MAC", "UTF-8-MAC", "UTF-8-HFS", "UCS-2BE", "UCS-4BE", "UCS-4LE", "CP1251", "UTF8-DoCoMo", "SJIS-DoCoMo", "UTF8-KDDI", "SJIS-KDDI", "ISO-2022-JP-KDDI", "stateless-ISO-2022-JP-KDDI", "UTF8-SoftBank", "SJIS-SoftBank", "locale", "external", "filesystem", "internal"]

实际上,非ascii字符不支持大写,

完全不同意您对Java的看法。Node.js并不是作为一个特定的实现支持Unicode,而是因为javascript作为一种语言(它是ECMAScript标准的一部分),所以它应该是平滑的。我觉得如果你这么强调字符串支持的话,你可能没有为这项工作选择合适的工具…@Davin:我对java有这个想法。。。在大学里编写代码是多么无聊,我可能受到了精神创伤。是的,我同意node.js是一个很好的候选者,尽管它和它的库非常新。但我仍然热衷于研究其他选项,因为node.js(可能是错误的)在我看来还不够成熟。唯一喜欢java的人是那些患有斯德哥尔摩综合症的人。@ryeguy:听起来非常可怕,但我确实能从某种程度上理解这一点——对于PHP来说,这几乎是一样的,我当然知道为什么我一年多来没有接触过一行PHP。真的吗?我本以为会的,但我想问一下,因为我的脊椎和其他地方都有点发冷-(仔细地(非常仔细地)读这篇文章)当你使用perl/unicode时,你必须遵循一些规则。当你遵循这些规则时,你将获得非常有能力的和完全的unicode支持,包括字符名、转换、排序、NFC/NFD等。我认为它与任何其他语言都不可比……是的,这是我链接到的帖子,这是我的全部观点。我在d之前已经深入阅读了它我决定在我的问题中不提这一选项。我认真考虑过,但被接受的答案让我觉得这是一个非常麻烦的问题(例如,与“只起作用”的博士后相比).不过,我可能误解了…在提到的答案中,tchrist指出了unicode本身带来的许多问题。当时很多语言都不能处理这些问题。Perl是的,但我认为