[英]Character encoding/decoding in redis
我正在從Redis到Java程序中檢索一些特殊字符,但是這些字符沒有正確編碼/解碼。 這些字符已通過api訪問,插入了redis緩存,然后在java程序中使用。
在郵遞員(REST客戶端)上:
[^!-~°-µ\\\\s±–—‐“”’¼-¾]
在Redis緩存控制台(redis-cli.exe)上:
[^!-~\xef\xbf\xbd\xef\xbf\xbd-\xef\xbf\xbd\xef\xbf\xbd\\\\\\\\s\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd-\xef\xbf\xbd\xef\xbf\xbd]
在Java程序中:
[^!-~��-��\s����������������������-��]
不知道這是怎么回事! 為什么這些字符已以該xxx格式轉換。 有人請幫忙!
我可以解釋您看到的內容,但無法解決問題。
°
是Unicode字符DEGREE SIGN或U + 00B0,並以UTF-8編碼為\\xc2\\xb0
μ
為Unicode字符GREEK SMALL LETTER MU或U + 03BC,並以UTF-8編碼為\\xce\\xbc
是Unicode字符REPLACEMENT CHARACTER或U + FFFD,並在UTF-8中編碼為\\xef\\xbf\\xbd
您的帖子建議在Redis控制台和Java程序中將每個非ascii字符替換為兩個替換字符(我不知道如何)。 Java程序正確輸出字符,而Redis控制台輸出其UTF-8表示形式。
我懷疑這些字符最初是在UTF-8中傳遞的,並且在0x7F上使用了2個字節。 但是,當將其轉換為Java 16位字符時,用於解碼的字符集為純ascii,並且全部轉換為unicode替換字符。 如果沒有確切的工作說明,我不能多說。
我已經觀察到與Windows計算機上的字符集相關的類似問題。 無論您在哪里處理此輸入流,請使用Charset.forName("windows-1252")
(如果這不起作用,請檢查所需的編碼)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.