【Docker】.NET Core 6.0 webapi 发布上传到Docker Desktop并启动运行访问,接口返回数据乱码解决方法

欢迎来到《小5讲堂》,大家好,我是全栈小5。
这是《Docker容器》系列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 前言
  • 访问乱码
  • 乱码分析
    • core方向
    • docker方向
  • 乱码原因
    • 解决方法
  • 相关文章

前言

接上篇文章提到的中文乱码问题,本篇文章就来讲讲如何解决这个问题。
在Docker环境中,由于它默认的字符编码不是UTF-8,所以导致一些非 ASCII 字符显示乱码。

访问乱码

在这里插入图片描述

乱码分析

core方向

刚开始以为是.net core程序里需要设置编码,尝试下面代码进行解决,接触新东西总要踩下坑。

app.Use((context, next) =>
{context.Request.Headers["Accept-Charset"] = "utf-8";                    // 设置请求头部字符编码为 UTF-8context.Response.Headers["Content-Type"] = "text/plain; charset=utf-8"; // 设置响应头部字符编码为 UTF-8return next();
});

更新上面代码后,发现还是不行,同时也查看了响应标头,Content-Type,是有包含utf-8编码
在这里插入图片描述

docker方向

在core设置编码无效后,转到docker方向思考,查询相关资料可以通过设置Dockerfile来设置字符编码。

  • 关键设置

一个是有空格,一个是等于号,刚接触docker不久,不知道是不是因为版本问题,有知道的小伙伴可以评论区留言。
对于当前docker版本Docker version 24.0.7, build afdd53b,使用等于号才是正确参数设置,空格则无效。

错误写法:ENV LANG C.UTF-8
正确写法:ENV LANG=C.UTF-8
  • 博主文件
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443# 设置环境变量
ENV LANG=C.UTF-8FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApiDocker.csproj", "."]
RUN dotnet restore "./WebApiDocker.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "WebApiDocker.csproj" -c Release -o /app/buildFROM build AS publish
RUN dotnet publish "WebApiDocker.csproj" -c Release -o /app/publish /p:UseAppHost=falseFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApiDocker.dll"]

乱码原因

中文乱码问题通常是由于字符编码不一致或不正确引起的。

  • 以下是可能导致中文乱码的一些常见原因

1.系统编码设置不正确
在 Docker 环境中,如果没有正确设置系统的字符编码,可能会导致中文乱码问题。您可以尝试在 Dockerfile 中使用
ENV LANG=C.UTF-8 或 ENV LC_ALL=C.UTF-8 来设置系统的字符编码为 UTF-8。

2.文件编码不兼容
如果您的应用程序使用文件作为输入或输出,并且文件的编码与其他组件(如数据库或浏览器)所使用的编码不一致,那么在读取或传输文件时可能会出现乱码。请确保所有相关文件的编码一致,并且使用与其他组件兼容的编码方式,如 UTF-8。

3.字符编码设置不正确
在应用程序中,如果没有正确设置响应的字符编码,那么在返回数据时可能会出现乱码。确保在应用程序中正确设置响应的字符编码,以确保数据以正确的编码进行传输。

4.数据库编码不兼容
如果您的应用程序与数据库交互,并且数据库的编码与您的应用程序所使用的编码不匹配,那么在读取或写入数据库时可能会导致中文乱码。请确保在设置数据库时使用与应用程序兼容的编码,并在应用程序中正确处理数据的编码。

5.编码转换错误
在处理和传输数据时,如果没有正确处理编码转换操作,可能会导致中文乱码。确保在数据传输过程中进行正确的编码转换,以保持数据的一致性和正确性。

解决方法

Docker Core(也称为 Docker Engine)容器环境本身并没有特定的固定编码集。
它使用的是主机操作系统的默认编码集。
因此,Docker Core 容器环境的编码集取决于所在主机操作系统的设置。
在某些情况下,如果主机操作系统的默认编码集不是 UTF-8,那么在容器环境中显示中文可能会遇到问题。
这是因为容器内的应用程序通常会采用 UTF-8 编码来正确处理和显示多语言文本,尤其是涉及到非 ASCII 字符(如中文字符)时。
因此,如果容器内的应用程序期望使用 UTF-8 编码来正确处理和显示中文文本,那么在 Dockerfile 中设置 ENV LANG=C.UTF-8 是一种常见和推荐的做法。
这个设置将确保容器运行时的默认字符编码为 UTF-8。这样,应用程序在容器环境中运行时可以使用正确的编码来处理和显示中文文本。
当您设置 ENV LANG=C.UTF-8 后,容器内的其他组件(如数据库)也可能需要进行相应的设置以兼容 UTF-8 编码。

ENV LANG=C.UTF-8
  • 重新上传

直接把编译后的文件拖到对应文件夹下,右上角也会显示正在覆盖的文件数量
在这里插入图片描述

  • 重启容器

需要重启容器,否则无效果

cmd:docker restart webapi(自己容器名称)

  • 解决后显示效果
    在这里插入图片描述

相关文章

【Docker】linux、nginx、容器镜像三者基本概念
【Docker】在Windows下使用Docker Desktop创建nginx容器并访问默认网站
【Docker】在Windows操作系统上安装Docker
【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(1)
【Docker】使用VS创建、运行、打包、部署.net core 6.0 webapi

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言——联合体类型

📝前言: 在前面两篇文章:C语言——结构体类型(一)和C语言——结构体(二)中,我们讲述了C语言中重要的数据类型之一:结构体类型,今天我们来介绍一下C语言中的另…

C语言数组元素的引用

存储模式:一片连续的内存,按数据类型分割成若干相同大小的格子元素下标:数组开头位置的偏移量,a[0]引用第1个格子,a[1]引用第2个格子,以此类推 int a[5]; // 有效的下标范围是 0 ~ 4 a[0] 1; a[1] 2; a[2…

【机器学习】科学库使用手册第2篇:机器学习任务和工作流程(已分享,附代码)

本系列文章md笔记(已分享)主要讨论人工智能相关知识。主要内容包括,了解机器学习定义以及应用场景,掌握机器学习基础环境的安装和使用,掌握利用常用的科学计算库对数据进行展示、分析,学会使用jupyter note…

linux 自动定时清理缓存

文章目录 1,查看内存占用情况:1.1、free和available的区别?1.2、交换分区的作用? 2,手动清理命令3,定时自动清理3.1,创建文件夹3.2,新建文件cleanBuffer.sh3.3,添加内容3…

Transformer实战-系列教程2:Transformer算法解读2

🚩🚩🚩Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 Transformer实战-系列教程1:Transformer算法解读1 Transformer实战-系列教程2:Transformer算法解读2 5、Multi-head机制 在4中我们的输入是X&#x…

【保姆级教程|YOLOv8改进】【5】精度与速度双提升,使用FasterNet替换主干网络

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

重写Sylar基于协程的服务器(6、HOOK模块的设计)

重写Sylar基于协程的服务器(6、HOOK模块的设计) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、日志模…

大数据Zookeeper--案例

文章目录 服务器动态上下线监听案例需求需求分析具体实现测试 Zookeeper分布式锁案例原生Zookeeper实现分布式锁Curator框架实现分布式锁 Zookeeper面试重点选举机制生产集群安装多少zk合适zk常用命令 服务器动态上下线监听案例 需求 某分布式系统中,主节点可以有…

CentOS 8 安装配置 Hadoop3.3.6 伪分布式安装方式(适用于开发和调试)

1.配置服务器ssh免密登录,否则后面启动会报错:尝试通过SSH连接到主机出现认证错误的提示 配置服务器ssh免密登录: 1.生成SSH密钥对(如果尚未生成): 执行下面的命令生成密钥对,一直回车即可 ssh…

为后端做准备

这里写目录标题 flask 文件上传与接收flask应答(接收请求(文件、数据)flask请求(上传文件)传递参数和文件 argparse 不从命令行调用参数1、设置default值2、"从命令行传入的参数".split()3、[--input,内容] …

代码随想录day18--二叉树的应用6

LeetCode530.二叉搜索树的最小绝对差值 题目描述: 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 1: 输入:root [4,2,6,1,3] …

CSDN2024年我的创作纪念日1024天|不忘初心|努力上进|积极向前

CSDN2024年我的创作纪念日1024天| 学习成长机遇:学习成长收获:2023年度总结数据:2024新领域的探索:日常和自己的感慨:2024憧憬和规划:创作纪念日总结: 学习成长机遇: 大家好&#x…

SpringBoot-基础篇03

之前搭建了整个开发环境实现了登录注册,springBoot整合mybatis完成增删改查,今天完成分页查询,使用阿里云oss存储照片等资源,后期会尝试自己搭建分布式文件系统来实现。 一,SpringBootMybatis完成分页查询 1&#xff…

天线阵列车载应用——第1章 介绍 1.1节 汽车工业中的天线阵列:应用和频率范围

1.1 汽车工业中的天线阵列:应用和频率范围 无线通信系统的发展需要新的技术来支持更高质量的通信、新的服务和应用。近年来,汽车无线通信市场得到了极大的扩展。现代汽车使用不同的服务:AM/FM收音机、卫星广播(SDARS)、移动电话通信、数字音频广播(DAB)、远程无钥匙…

零基础学编程从入门到精通,系统化的编程视频教程上线,中文编程开发语言工具构件之缩放控制面板构件用法

一、前言 零基础学编程从入门到精通,系统化的编程视频教程上线,中文编程开发语言工具构件之缩放控制面板构件用法 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载—…

mysql事务锁

Lock - 事务锁 与 latch 的区别 lock对象是事务,用来锁定的是数据库中的对象,如表、行、页。并且一般lock的对象仅在事务commit或rollback后进行释放(不同事务隔离级别释放的时间可能不同)。此外,lock,正…

3.0 Zookeeper linux 服务端集群搭建步骤

本章节将示范三台 zookeeper 服务端集群搭建步骤。 所需准备工作,创建三台虚拟机环境并安装好 java 开发工具包 JDK,可以使用 VM 或者 vagrantvirtualbox 搭建 centos/ubuntu 环境,本案例基于宿主机 windows10 系统同时使用 vagrantvirtualb…

发送get请求并且发送请求头(header),java实现

发送get请求时,发送请求头(Header)中的内容 方便第二次调用其他url时传递参数,例如userCode或者租户编码 调用方式 Autowired private HttpServletRequest request;先注入HttpServletRequestpublic xxx xxx(){String url &quo…

docker程序镜像的制作

目录 一、每种资源的预安装(基础) 安装 nginx安装 redis 二、dockerfile文件制作(基础) 打包 redis 镜像 创建镜像制作空间制作dockerfile 打包 nginx 镜像 三、创建组合镜像(方式一) 生成centos容器并…

vue3+echarts:Vue中使用echarts从后端获取数据并赋值显示

//由于前后端交互,所以使用axios发送请求 const Count ref(null); //设备种类数值 const Name ref(null); //设备种类名称 //设备种类 饼图 const pieChart () > {const getpieChart echarts.init(document.getElementById("deviceKind"));// 创建图标getpieC…