代码改变世界

使用 UTL_HTTP.SET_BODY_CHARSET 解决 LLM 调用乱码问题

2025-04-01 17:24  AlfredZhao  阅读(34)  评论(0)    收藏  举报

UTL_HTTP.SET_BODY_CHARSET('UTF-8') 是用来设置 HTTP 请求的 正文字符集(body charset),即指定发送 HTTP 请求时请求体内容的字符编码方式。字符集用于告诉接收方如何解码请求体中的内容,确保在客户端和服务器之间传输时正确处理字符编码。

1. 意义:

  • 通过指定 UTF-8 字符集,你告诉数据库或客户端在发送 HTTP 请求时,正文内容应使用 UTF-8 编码方式。这对于处理包含中文、日文等多字节字符集的文本内容尤其重要,确保在请求过程中不会出现乱码。

  • 举个例子,假设你通过 UTL_HTTP 向外部接口发送带有中文的 HTTP 请求体。如果不指定字符集,可能会导致发送的数据在接收端被错误解码,导致乱码,而指定 UTF-8 则可以避免这个问题。

2. 默认字符集:

  • 如果不调用 UTL_HTTP.SET_BODY_CHARSET 来显式指定字符集,Oracle 默认使用 ISO-8859-1 字符集(也称作 Latin-1)来发送 HTTP 请求体。这意味着,如果请求体包含非 ASCII 字符(例如中文字符),会因为字符集不匹配而导致乱码。

示例:

BEGIN
   -- 设置字符集为 UTF-8
   UTL_HTTP.SET_BODY_CHARSET('UTF-8');
   
   -- 创建并发送 HTTP 请求
   -- 这里可以继续调用其他 UTL_HTTP 相关函数,如 UTL_HTTP.REQUEST,DBMS_VECTOR_CHAIN.UTL_TO_GENERATE_TEXT等
END;

总结:

  • 指定字符集:确保 HTTP 请求体正确编码,特别是当数据包含非 ASCII 字符(如中文)时。
  • 默认字符集:如果不指定,Oracle 默认使用 ISO-8859-1,这可能导致非 ASCII 字符无法正确传输。