簡體   English   中英

Redis中的字符編碼/解碼

[英]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.

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