亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我所有的解碼字符串都有“?” 在末尾?Java 字符串解碼

為什么我所有的解碼字符串都有“?” 在末尾?Java 字符串解碼

呼如林 2022-12-21 11:58:49
我正在使用 Tweepy 庫 (Python) 和 Kafka 從 Twitter 檢索推文。文本以 UTF-8 編碼,如下行所示:self.producer.send('my-topic', data.encode('UTF-8'))其中“數據”是一個字符串。然后,此數據以鍵值格式存儲到 Oracle NoSQL 數據庫中。出于這個原因,推文本身是經過編碼的。我用 Java 這樣做:Value myValue = Value.createValue(msg.value().getBytes("UTF-8"));最后,推文由用 Java 開發的 Formatter 檢索。為了將其存儲在關系模式中,我必須解析推文,以便將其作為字符串檢索。String data = new String(value.toByteArray(),StandardCharsets.UTF_8);如您所見,我在執行的所有步驟中都保持 UTF-8 編碼。但是,當我在我的數據庫中看到推文的文本時,它總是被刪減。例如:RT @brIIohead:今年我不得不吞下的最難的藥丸是學習無論你對某人有多好,無論多么好?注意它是如何以“?”結尾的 符號,而且已經被清楚地切斷了。好吧,每條長推文都會發生這種情況。我的意思是,如果文本長度為 30 個字符,那么它顯示正常,但是任何超過 100 個字符的內容都會被剪切掉。起初我以為它可能是我的表定義,但字段“文本”被聲明為VARCHAR2(400 CHAR)推文在社交網絡中可以包含的最大字符數。關于如何發現剪切文本和放置“?”的任何想法 符號在最后?“數據”的樣子:我還必須提到,這整個塊都是經過編碼的。然后解碼,最后解析到數據庫中。所有字段都被正確解碼和解析,除了被剪切的“文本”
查看完整描述

1 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

根據官方文檔,一條推文不超過“140”個字符(這是一個寬泛的定義);但最近他們將其更改為280。


同一份文件說:


Twitter 使用文本的規范化形式 C (NFC) 版本計算推文的長度。


所以他們首先規范化文本(我會讓你弄清楚這是如何完成的是java)。后來他們說:


Twitter 還計算文本中代碼點的數量,而不是 UTF-8 字節。


因此:


String test = "RT @briIIohead: the hardest pill i had to swallow this year was learning that no matter how good you could be to somebody, no matter how mu";

System.out.println(test.codePoints().count()); // 139

似乎最初的推文是 280 個“字符”,而您使用的庫并不知道這一點,因此它只使用了之前的 140 個。因為它做了一些分塊,所以分塊似乎也是錯誤的,它在最后刪除了一些“部分”字節。當您嘗試打印這些時 - java 不知道那些(最后)字節的實際含義(因為一些錯誤的分塊)并且只是說?(這是當它根本不理解某些東西時顯示內容的默認策略)。


查看完整回答
反對 回復 2022-12-21
  • 1 回答
  • 0 關注
  • 82 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號