|
|
@@ -264,13 +264,21 @@ func parseProtocolPart(part string, params *RoomParams) error {
|
|
|
prefix := part[:sepIndex]
|
|
|
encodedData := part[sepIndex+1:]
|
|
|
|
|
|
- // Base64解码 - 使用RawStdEncoding来处理可能没有正确填充的base64字符串
|
|
|
+ // Base64解码 - 按优先级尝试不同的编码方式
|
|
|
decodedBytes, err := base64.RawStdEncoding.DecodeString(encodedData)
|
|
|
if err != nil {
|
|
|
- // 如果RawStdEncoding失败,尝试标准的StdEncoding(带填充)
|
|
|
- decodedBytes, err = base64.StdEncoding.DecodeString(encodedData)
|
|
|
+ // 如果RawStdEncoding失败,尝试RawURLEncoding(URL安全的base64)
|
|
|
+ decodedBytes, err = base64.RawURLEncoding.DecodeString(encodedData)
|
|
|
if err != nil {
|
|
|
- return fmt.Errorf("Base64解码失败: %v", err)
|
|
|
+ // 如果RawURLEncoding也失败,尝试标准的StdEncoding(带填充)
|
|
|
+ decodedBytes, err = base64.StdEncoding.DecodeString(encodedData)
|
|
|
+ if err != nil {
|
|
|
+ // 最后尝试URLEncoding
|
|
|
+ decodedBytes, err = base64.URLEncoding.DecodeString(encodedData)
|
|
|
+ if err != nil {
|
|
|
+ return fmt.Errorf("Base64解码失败: %v", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|