UTF-8和UTF-16之间的区别?我们为什么需要这些?
MessageDigest md = MessageDigest.getInstance("SHA-256");
String text = "This is some text";
md.update(text.getBytes("UTF-8")); // Change this to "UTF-16" if needed
byte[] digest = md.digest();
Run Code Online (Sandbox Code Playgroud) 简单的问题:我想设置一个TextView,我希望有三个点(省略号).喜欢
Read more...< - 现在我确定我不应该只写入...字符串.我应该怎么写这三个点?
所以Java中的'char'是2个字节.(可以从这里验证.)
我有这个示例代码:
public class FooBar {
public static void main(String[] args) {
String foo = "€";
System.out.println(foo.getBytes().length);
final char[] chars = foo.toCharArray();
System.out.println(chars[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
3
€
Run Code Online (Sandbox Code Playgroud)
我的问题是,Java如何将3字节字符装入char数据类型?顺便说一句,我正在使用参数运行应用程序:-Dfile.encoding = UTF-8
此外,如果我进一步编辑代码并添加以下语句:
File baz = new File("baz.txt");
final DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(baz));
dataOutputStream.writeChar(chars[0]);
dataOutputStream.flush();
dataOutputStream.close();
Run Code Online (Sandbox Code Playgroud)
最终文件"baz.txt"将只有2个字节,即使我将其视为UTF-8文件,它也不会显示正确的字符.
编辑2:如果我用UTF-16 BE编码打开文件"baz.txt",我会在文本编辑器中看到€字符就好了,我觉得这很有道理.
我在Java中有一个包含String的对象.我很好奇String的内存使用情况如何.我正在尝试优化我的程序的内存使用量,应用程序将有大约10000个这样的对象.对于诸如"Hello World"之类的字符串,内存使用量是多少?
public int length()
返回此字符串的长度。
长度等于字符串中Unicode代码单元的数量。
指定者:
接口CharSequence中的length
返回值:
此对象表示的字符序列的长度。
但是我不明白为什么下面的程序HelloUnicode.java在不同的平台上产生不同的结果。根据我的理解,Unicode代码单元的数量应该相同,因为Java应该总是以UTF-16表示字符串:
public class HelloWorld {
public static void main(String[] args) {
String myString = "I have a in my string";
System.out.println("String: " + myString);
System.out.println("Bytes: " + bytesToHex(myString.getBytes()));
System.out.println("String Length: " + myString.length());
System.out.println("Byte Length: " + myString.getBytes().length);
System.out.println("Substring 9 - 13: " + myString.substring(9, 13));
System.out.println("Substring Bytes: " + bytesToHex(myString.substring(9, 13).getBytes()));
}
// Code from /sf/answers/689873691/
private final static char[] hexArray = "0123456789ABCDEF".toCharArray(); …Run Code Online (Sandbox Code Playgroud) 我已经阅读了以下帖子:
现在考虑下面给出的代码:
public static void main(String[] args) {
printCharacterDetails("?");
}
public static void printCharacterDetails(String character){
System.out.println("Unicode Value for "+character+"="+Integer.toHexString(character.codePointAt(0)));
byte[] bytes = character.getBytes();
System.out.println("The UTF-8 Character="+character+" | Default: Number of Bytes="+bytes.length);
String stringUTF16 = new String(bytes, StandardCharsets.UTF_16);
System.out.println("The corresponding UTF-16 Character="+stringUTF16+" | UTF-16: Number of Bytes="+stringUTF16.getBytes().length);
System.out.println("----------------------------------------------------------------------------------------");
}
Run Code Online (Sandbox Code Playgroud)
当我尝试character.getBytes()在上面的代码中调试行时,调试器将我带入getBytes()String类的方法,然后进入static byte[] encode(char[] ca, int off, int len)StringCoding类的方法.String csn = Charset.defaultCharset().name();在调试过程中,encode method()的第一行返回"UTF-8"作为默认编码.我预计它会是"UTF-16".
该计划的输出是:
最大的Unicode值= 6700 UTF-8字符=最| 默认值:字节数= 3
相应的UTF-16字符= | UTF-16:字节数= 6 …
假设我将Java字符数组(char[])实例编码为字节:
这总是会创建一个有效的UTF-16BE编码吗?如果不是,哪些代码点将导致无效编码?
这个问题与关于Java char类型的这个问题以及关于Java字符串的内部表示的这个问题非常相关.
我想知道哪种字符串表示形式(正常的字符串或字节数组)需要更多的存储空间?
我的代码中可以使用字节数组表示形式。在通过网络传输它之前(响应AJAX调用),我应该将其转换为String吗?
我知道字符串享有一些特权,它在java中被定义为类.作为该帖子的引用Java程序中的字符串大小是否有限制?字符串的大小约为2 ^ 31-1.所以我的问题是类如何限制大小分配,因为我知道类可以分配尽可能多的内存块
public class ClassToTestSnippets {
private static ClassToTestSnippets ctts;
public static void main(String[] args) {
ctts = new ClassToTestSnippets();
ctts.testThisMethod();
}
public void testThisMethod() {
System.out.println("\u2014".length()); //answer is 1
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印1.不过\u2014是E2 80 94即3个字节.我如何知道字符串包含多少字节?