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

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

共享的GAE數據存儲區,Go <-> Java,regexp.FindStringIndex索引移位

共享的GAE數據存儲區,Go <-> Java,regexp.FindStringIndex索引移位

Go
素胚勾勒不出你 2021-04-29 14:57:54
短版: 打印3,這很有意義,因為Go語言中的字符串基本上是一個字節的片,并且需要三個字節來表示此字符。我如何才能獲得len和regexp函數來使用字符而不是字節。package mainimport "fmt"func main() {    fmt.Println(len("ウ"))//returns 3    fmt.Println(utf8.RuneCountInString("ウ"))//returns 1}背景:我正在使用JDO(Java)將文本保存到GAE數據存儲中。然后,我使用Go處理文本,特別是使用regexp.FindStringIndex并將索引保存到數據存儲中。然后回到Java領域,我發送未修改的文本,并通過json索引到GWT客戶端。索引在“移動”過程中的某個位置,因此當它在客戶端上時,它們已關閉。看來問題與字符編碼有關,我假設Java / Go解釋文本(索引)的方式與utf-8 char / byte不同?我在regexp包中看到了對符文的引用。我想我可以使regexp.FindStringIndex返回go中的字節索引,或者使GWT客戶端了解utf-8索引。有什么建議么?如果將來需要國際化該應用程序,我應該使用UTF-8,對嗎?
查看完整描述

1 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

正如您可能已經了解到的那樣,Go和Java對待字符串的方式有所不同。在Java中,字符串是一系列代碼點(字符)。在Go中,字符串是一系列字節。Go中的文本操作函數在必要時可以理解UTF-8代碼點,但是由于字符串以字節表示,因此它們返回并使用的索引是字節索引,而不是字符索引。

正如您在注釋中觀察到的那樣,您可以使用RuneReaderFindReaderIndex獲取以字符而不是字節為單位的索引。strings.Reader提供的實現RuneReader,因此您可以使用strings.NewReader將字符串包裝到中RuneReader

另一個選擇是獲取所需的in字符長度的子字符串,然后將其傳遞給utf8.RuneLen,后者返回UTF-8字符串中的字符數。但是,使用aRuneReader可能更有效。


查看完整回答
反對 回復 2021-05-10
  • 1 回答
  • 0 關注
  • 257 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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