【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-8
    context.Response.Headers["Content-Type"] = "text/plain; charset=utf-8"; // 设置响应头部字符编码为 UTF-8

    return 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-8

FROM 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/build

FROM build AS publish
RUN dotnet publish "WebApiDocker.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM 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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

进程控制(Linux)

进程控制 一、进程创建1. 再识fork2. 写时拷贝 二、进程终止前言——查看进程退出码1. 退出情况正常运行,结果不正确异常退出 2. 退出码strerror和errno系统中设置的错误码信息perror异常信息 3. 退出方法exit和_exit 三、进程等待1. 解决等待的三个问题2. 系统调用…

使用pandas将excel转成json格式

1.Excel数据 2.我们想要的JSON格式 {"0": {"raw_data1": "Sam","raw_data2": "Wong","raw_data3": "Good","layer": "12v1"},"1": {"raw_data1": "Lucy…

外汇天眼:大量的平庸操作无济于事,少数的杰出操作改变人生

回顾我们的人生,道路虽然漫长,经历虽然众多,但紧要处其实只有关键的几步。 在关键时刻处理得最好的人就会拥有最成功的事业; 回顾我们所交过的朋友,虽然数量像天上的繁星,但真正对自己的人生有重大影响的,不…

NUUO 网络摄像头命令执行漏洞

一、设备简介 NUUO NVR是中国台湾省NUUO公司旗下的一款网络视频记录器,该设备存在远程命令执行漏洞,攻击者可利用该漏洞执行任意命令,进而获取服务器的权限。 网络视频记录器的CPU为Marvell Kirkwood 88F6281,CPU架构为基于ARMv5…

LLM(大语言模型)——大模型简介

目录 概述 发展历程 大语言模型的概念 LLM的应用和影响 大模型的能力、特点 大模型的能力 涌现能力(energent abilities) 作为基座模型支持多元应用的能力 支持对话作为统一入口的能力 大模型的特点 常见大模型 闭源LLM(未公开源…

GADM 4.1 全球国家行政区划下载

扫描文末二维码,关注微信公众号:ThsPool 后台回复g004,领取最新 GADM 4.1 全球国家行政区划 GADM概述 GADM,全称 Database of Global Administrative Areas,是一个开放获取的全球行政区划数据库,包含各国、…

智慧城市与数字孪生:技术驱动下的城市治理与生活变革

一、引言 随着科技的飞速发展,智慧城市和数字孪生已经成为现代城市发展的重要趋势。它们通过运用先进的信息通信技术,提升了城市的治理效率和居民的生活品质。本文将探讨智慧城市与数字孪生如何共同推动城市治理与生活的变革,以及面临的挑战…

Webpack源码浅析

webpack启动方式 webpack有两种启动方式: 通过webpack-cli脚手架来启动,即可以在Terminal终端直接运行; webpack ./debug/index.js --config ./debug/webpack.config.js通过require(webpack)引入包的方式执行;其实第一种方式最终…

踩坑了,MySQL数据库生成大量奇怪的大文件

作者:田逸(formyz) 一大早就收到某个数据库服务器磁盘满的报警信息,其中数据盘使用率超过90%,如下图所示。 这是一台刚上线不久的MySQL从库服务器,数据盘的总容量是300G。先登录系统,查看主从同…

一般系统的请求认证授权思路【gateway网关+jwt+redis+请求头httpheader】

gateway:网关,我们都知道网关的作用就是对系统的所有请求,网关都会进行拦截,然后做一些操作(例如:设置每个请求的请求头httpHeader,身份认证等等)此时一般会使用到网关过滤器&#x…

感悟笔记——2024年2月5日

今日阅读了一篇挺有深度的文章,主要阐述进入职场后的大部分人,是怎么逐渐沦为螺丝钉的?即使起点巨高的优等生,也不可避免。文章指路: 「优等生思维」正在将你变成「螺丝钉」和「老黄牛」从小到大,我一直都是那个「别…

随记-Java项目处理SQL注入问题

现象:http://10.xx.xx.xx:xx/services/xxService 存在SQL注入情况 加固意见: 需要对网站所有参数中提交的数据进行过滤,禁止输入“"、"xor"、"or"、”--“、”#“、”select“、”and“等特殊字符;所有…

专业排版设计软件:QuarkXPress 2024 for mac中文激活版

QuarkXPress 2024 for Mac是一款功能强大、易于使用、高质量输出的专业排版软件。无论您是出版业的专家还是初学者,都可以通过QuarkXPress 2024轻松创建出令人惊叹的出版物。 软件下载:QuarkXPress 2024 for mac中文激活版下载 QuarkXPress 2023 for Mac…

游戏后端如何实现服务器之间的负载均衡?

在当今的游戏行业中,随着游戏用户数量的不断增加,如何实现服务器之间的负载均衡成为了一个亟待解决的问题。游戏后端作为游戏的重要组成部分,承载着游戏逻辑处理和数据存储等功能,因此游戏后端的负载均衡问题尤为重要。本文将详细…

FINN: 使用神经网络对网络流进行指纹识别

文章信息 论文题目:FINN: Fingerprinting Network Flows using Neural Networks 期刊(会议):Annual Computer Security Applications Conference 时间:2021 级别:CCF B 文章链接:https://dl.ac…

centos7的git使用方法

下载git yum install git git克隆 git clone https...(图片中复制的内容) git提交到远程仓库 git add filename git commit -m "提交日志" git push git首次使用要配置邮箱和用户名 查看提交日志 git log 查看当前提交状态 git status

JAVASE进阶:一文精通Stream流+函数式编程

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:JAVASE进阶:源码精读——HashMap源码详细解析 📚订阅专栏:JAVASE进阶 希望文章对你们有所帮助…

【第三十五节】idea项目的创建以及setting和Project Structure的设置

项目创建 Project Structure的设置 点击file ~ Project Structure 进入

RBAC权限控制实现方案

上一文章讲述了利用RBAC实现访问控制的思路(RBAC实现思路),本文主要详细讲解利用vuex实现RBAC权限控制。 一、准备工作 从后台获取到权限对照表,如下: 1、添加/编辑楼宇 park:building:add_edit 2、楼宇管理 pa…

3. ⼤语⾔模型深度学习背景知识

1. LLM⼤语⾔模型⼀般训练过程 #mermaid-svg-8kci1fjEPiVolPue {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8kci1fjEPiVolPue .error-icon{fill:#552222;}#mermaid-svg-8kci1fjEPiVolPue .error-text{fill:#5522…