草庐IT

java - 我们可以在 ASCII 和 Unicode 之间切换吗

coder 2024-03-28 原文

我遇到“char 变量是 Unicode 格式,但也采用/映射到 ASCII”。有什么必要提这个?当然 ASCII 是 1 个字节,Unicode 是 2 个字节。Unicode 本身包含 ASCII 代码(默认情况下 - 它是标准)。那么是否有一些语言中的 char 变量支持 UNICODE 但不支持 ASCII?

另外,字符格式(Unicode/ASCII)是由我们使用的平台决定的,对吧? (UNIX、Linux、Windows 等)。那么假设我的平台使用 ASCII,是否无法切换到 Unicode 或反之亦然?

最佳答案

Java 在内部使用 Unicode。总是。 实际上,它大部分时间使用的是 UTF-16,但现在说的太多了。

它可以在内部使用ASCII(例如对于String)。您可以表示可以在 Unicode 中以 ASCII 表示的任何字符串,因此这应该不是问题。

唯一平台发挥作用的地方是当 Java 必须选择一种编码而您没有指定编码时。例如,当您创建一个 FileWriter 以将 String 值写入 String 时:此时 Java 需要使用一种编码来指定特定字符应如何映射到字节.如果不指定,则使用平台的默认编码。默认编码几乎从不使用 ASCII。大多数 Linux 平台使用 UTF-8,Windows 经常使用一些 ISO-8859-* 衍生物(或其他文化特定的 8 位编码),但当前的操作系统都没有使用 ASCII(仅仅是因为 ASCII 不能代表了很多重要人物)。

事实上,现在纯 ASCII 几乎无关紧要:没有人使用它。 ASCII 作为大多数 8 位编码(包括 UTF-8)映射的公共(public)子集很重要:较低的 128 个 Unicode 代码点在许多情况下 1:1 映射到数值 0-127,许多编码。但是纯 ASCII(值 128-255 是未定义)不再被积极使用。

作为旁注,Java 9 有一个称为“紧凑字符串”的内部优化,其中仅包含可在 Latin-1 中表示的字符的字符串每个字符使用一个字节而不是 2 个字节。这种优化对于各种“计算机语言”,如 XML 和类似的协议(protocol),其中大部分文本都在 ASCII 范围内。但它对开发人员也是完全透明的,因为所有处理都是在 String 类内部完成的,从外部看不到。

关于java - 我们可以在 ASCII 和 Unicode 之间切换吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15610247/

有关java - 我们可以在 ASCII 和 Unicode 之间切换吗的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - unicode 字符串的长度 - 2

    在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  5. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  6. ruby-on-rails - Ruby on Rails with Haml - 如何从 erb 切换 - 2

    我正在从erb文件切换到HAML。我将hamlgem添加到我的系统中。我创建了app/views/layouts/application.html.haml文件。我应该只删除application.html.erb文件吗?此外,仍然有/public/index.html文件被呈现为默认页面。我想创建自己的默认index.html.haml页面。我应该把它放在哪里以及如何使系统呈现该文件而不是默认索引文件?谢谢! 最佳答案 是的,您可以删除任何已转换为HAML的View的ERB版本。至于你的另一个问题,删除public/index/h

  7. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  8. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  9. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  10. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

随机推荐