今天用C# Post请求时发现返回值为中文乱码,百度查了一些资料后发现,只用改一个参数就可以解决乱码问题
乱码部分的代码是这样的,百度官方文档,出处
https://ai.baidu.com/ai-doc/OCR/1k3h7y3db
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
namespace com.baidu.ai
{
public class AccurateBasic
{
// 通用文字识别(高精度版)
public static string accurateBasic()
{
string token = "[调用鉴权接口获取的token]";
string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=" + token;
Encoding encoding = Encoding.Default;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
request.Method = "post";
request.KeepAlive = true;
// 图片的base64编码
string base64 = getFileBase64("[本地图片文件]");
String str = "image=" + HttpUtility.UrlEncode(base64);
byte[] buffer = encoding.GetBytes(str);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
string result = reader.ReadToEnd();
Console.WriteLine("通用文字识别(高精度版):");
Console.WriteLine(result);
return result;
}
public static String getFileBase64(String fileName) {
FileStream filestream = new FileStream(fileName, FileMode.Open);
byte[] arr = new byte[filestream.Length];
filestream.Read(arr, 0, (int)filestream.Length);
string baser64 = Convert.ToBase64String(arr);
filestream.Close();
return baser64;
}
}
}
如果按照官方代码写出来,返回值就是中文乱码,其实只需要改一个参数,就可以显示正常中文返回值
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
改完后,返回结果正常中文如下: