簡體   English   中英

如何在 java 中准確獲取 UTF-8 字符串?

[英]How to get exactly UTF-8 string in java?

我想從下面的代碼中獲取 UTF-8 字符串:

String tmpStr= "ALMS_à¸à¸±à¹à¸à¸à¸­à¸à¸¥à¸à¸à¸°à¹à¸à¸µà¸¢à¸.pdf";
String fileName = new String(tmpStr.getBytes(), Charset.forName("UTF_8"));

但是當我調試時,fileName 的錯誤值如下:ALMS_�?ั�?�?�?อ�?ล�?�?ะ�?�?ีย�?.pdf 在此處輸入圖像描述

當我在線測試轉換時,它工作正常: 在此處輸入圖像描述

任何人都可以幫我解決問題嗎? 謝謝。 我正在使用 eclipse 編碼 java 並在其中配置編碼 UTF-8 。

不知道你從哪里得到初始字符串,但是 Java 內部使用 UTF-16 來表示字符串。

當您需要serialize字符串以通過連接傳輸、將其存儲在數據庫中、將其打印在文本文件中或在網頁上時,使用編碼是有意義的。

傳輸/存儲/打印的是所選編碼中字符串的字節數組表示。

通過連接、文件或數據庫接收/讀取值時也是如此。 您需要以正確的編碼解釋字節。

String 提供了一個getBytes()方法,該方法使用平台默認編碼獲取 String 的表示形式,不推薦使用,因為它使代碼依賴於平台。 您可以使用字符串、 getBytes("UTF-8")或字符集來提供編碼。 由於 Java 1.7, StandardCharsets字符集 class 為必須支持 JVM 的編碼提供了快捷方式,因此您可以使用getBytes(StandardCharsets.UTF_8)

現在,您的代碼應該是這樣的:

String tmpStr= "ALMS_à¸à¸±à¹à¸à¸à¸­à¸à¸¥à¸à¸à¸°à¹à¸à¸µà¸¢à¸.pdf";  
String fileName = new String(tmpStr.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);

但這不會產生您期望的字符串,只會獲得 tmpStr 的 UTF-8 字節表示,並創建一個讀取 UTF-8 字節表示的新字符串表示。 因此,在此之后您可以斷言tmpStr等於filename

我懷疑您暴露的問題與您從哪里讀取 tmpStr 值以及首先使用什么編碼將其轉換為字符串有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM