gpt4 book ai didi

java - 如何在Android中正确处理字符串长度和编码?

转载 作者:行者123 更新时间:2023-12-02 11:45:45 24 4
gpt4 key购买 nike

我对什么感到困惑

您好,我目前对字符集的状态以及如何在 Android 中最好地处理它们感到非常困惑。消息来源似乎也提供了相互矛盾的信息。

1) 根据这篇文章,Java JVM 默认为 UTF-16
What is the Java's internal represention for String? Modified UTF-8? UTF-16?

2) 根据这篇文章,Java JVM(Android 下)默认为 UTF-8
Android default character encoding
https://developer.android.com/reference/java/nio/charset/Charset.html#defaultCharset()

我目前正在做什么

1) 我有一个 Android 应用程序 minSdkVersion 17

2) 它的 gradle 中没有设置文件/manifest文件/任何指定有关字符集或编码的首选项的文件。

3) 它使用 AppCompatEditTextAppCompatTextView来自com.android.support:appcompat-v7其中一些受 xml 属性 android:maxLength="140" 的约束

4) 使用 String myText = myView.getText().toString(); 的代码获取内容。

5) 使用 myView.setText(myText); 的代码设置内容。

6) 使用 myText.length(); 的代码来测量内容。 (即根据 android:maxLength="140" 更新“剩余字符” View )

基本上就是这个remaining.setText(String.valueOf(140 - myText.length()));连接到TextWatcher.onTextChanged事件监听器

我需要什么帮助

1) 一种标准化 Java 和 Android 以便为我的应用程序使用相同字符集的方法(强制它们使用 UTF-16UTF-8 - 我不想处理可能出现的奇怪的极端情况使用 2 个不同的字符集(或者如果用户将默认值设置为不同的东西 - 他们甚至可以这样做吗?不知道发生了什么 AAAAAAAAAH)

2) 一种标准化 android:maxLength="140" 行为的方法和remaining.setText(String.valueOf(140 - myText.length())); - 我不知道 Android 在 android:maxLength 的底层做了什么,我需要确保remaining.setText(String.valueOf(140 - myText.length()));不会返回负值,因为也许 android:maxLength不使用String.length();但还有其他一些奇怪的代码点测量系统。

3) 一种正确编码和解码的方法 String myText HTTPS 与后端 Django 服务器之间的数据传输。

如果问题不好或含糊,我们深表歉意。我现在真的陷入了字符集 hell 。我现在只需要某种直接的 list 来让 Android 中的东西“工作”......

最佳答案

Android JVM 仍然是 Java JVM,因此它必须遵循 Java 规范,该规范规定 char 为 2 个字节,String 使用 UTF- 16 的公共(public)接口(interface),无论内存中字符数据的内部表示如何。 Peter 在 What is the Java's internal represention for String? Modified UTF-8? UTF-16? 的回答中说明了这一点您链接到的。

字符集不适用于仅字符串的操作,例如访问字符、分配字符串值等。Java应用程序内的所有内容都是UTF-16。字符集仅适用于在String和字节之间转换时的序列化操作,例如在文件I/O、网络I/O等期间。String数据进入/离开的地方Java 应用程序。

关于java - 如何在Android中正确处理字符串长度和编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48214227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com