From c6fc56281fa59d5ae36ce24a1d3817dfb224df76 Mon Sep 17 00:00:00 2001 From: JustSong Date: Fri, 12 May 2023 09:58:51 +0800 Subject: [PATCH] fix: fix UTF8 characters are not encoded correctly (#79) --- channel/telegram.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/channel/telegram.go b/channel/telegram.go index 30bb88a..c3b76ef 100644 --- a/channel/telegram.go +++ b/channel/telegram.go @@ -7,6 +7,7 @@ import ( "fmt" "message-pusher/model" "net/http" + "unicode/utf8" ) var TelegramMaxMessageLength = 4096 @@ -41,7 +42,10 @@ func SendTelegramMessage(message *model.Message, user *model.User, channel_ *mod for idx < len(text) { nextIdx := idx + TelegramMaxMessageLength if nextIdx > len(text) { + // we have reach the end, must be valid nextIdx = len(text) + } else { + nextIdx = getNearestValidSplit(text, nextIdx) } messageRequest.Text = text[idx:nextIdx] idx = nextIdx @@ -65,3 +69,18 @@ func SendTelegramMessage(message *model.Message, user *model.User, channel_ *mod } return nil } + +func getNearestValidSplit(s string, idx int) int { + if idx >= len(s) { + return idx + } + if idx == 0 { + return 0 + } + isStartByte := utf8.RuneStart(s[idx]) + if isStartByte { + return idx + } else { + return getNearestValidSplit(s, idx-1) + } +}