該賞金過期7天。此問題的答案有資格獲得 100聲望賞金。 Partho63希望引起對這個問題的更多關注。
我正在開發一個 Java 應用程式。我需要在我的 Java webapp 中獲得 UTF-8 編碼以支持孟加拉語 (?????) 文本。我做了以下事情:
Tomcat 的 server.xml
<Connector port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
<Connector executor="tomcatThreadPool"
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443"
URIEncoding="UTF-8" />
catalina.bat 檔案中的 JVM defaultCharset
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8
application.properties 中的屬性
spring.datasource.url=jdbc:mysql://localhost:3306/database_name?useUnicode=true\&characterEncoding=UTF-8
spring.datasource.tomcat.connection-properties=useUnicode=true;characterEncoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
server.tomcat.uri-encoding=UTF-8
spring.webflux.multipart.headers-charset=UTF-8
spring.thymeleaf.encoding=UTF-8
html檔案中的元標記
<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
<meta charset="utf-8">
</head>
<body>
</body>
</html>
表單標簽中的 utf-8 支持
<form enctype="multipart/form-data" accept-charset="UTF-8" action="#" th:action="@{/create}" th:object="${object}" th:method="POST">
<div class="form-group">
<label for="name" class="col-form-label">Name</label>
<input type="text" class="form-control" id="name" name="name" th:field="*{name}" placeholder="Enter Name">
</div>
<div class="form-group">
<label for="photo">Photo</label>
<input type="file" class="form-control-file" id="photo" name="photo"/>
</div>
<div>
<button class="btn" type="submit">Submit</button>
</div>
</form>
MySQL 配置 (my.ini)
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
MySQL 屬性:
Database:
Default collation: utf8mb4_0900_ai_ci
Default charactterset: utf8mb4
Table:
Table collation: utf8mb4_0900_ai_ci
Column:
Type: varchar(255)
Character Set: utf8mb4
Collation: utf8mb4_0900_ai_ci
配置:
- Java 11.0.2
- 雄貓 8.5
- MySQL 8.0.16
- 春季啟動 2.2.4
- Maven 3.8.1
- Windows Server 2019 標準版(生產) Windows 10 家庭版(開發)
當我提交帶有 value 的表單時??????,它被保存為à|?à|¨à§?à§?à|?à|°
我怎么解決這個問題?
當我從 Eclipse 運行應用程式時,它作業正常。但是當war檔案部署在Tomcat服務器上時它就不起作用了。
我嘗試了以下代碼。它列印à|?à|¨à§?à§?à|?à|°在 tomcat8-stdout 檔案中。所以我認為在將資料從瀏覽器傳輸到服務器、從服務器傳輸到資料庫時會出現問題。
@PostMapping("/create")
public String create(@ModelAttribute("object") Object object, @RequestParam("photo") MultipartFile photo) throws IOException {
System.out.println(object.getName());
return "redirect:/index";
}
uj5u.com熱心網友回復:
POST 引數的編碼不是在Connector層級上設定的,而是在ServletRequest物件上設定的。
Tomcat 提供了一個過濾器來設定它,如檔案中所述。
將此添加到您的 web.xml 檔案中:
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
uj5u.com熱心網友回復:
當您使用 Spring 時,您可以嘗試使用CharacterEncondingFilter來強制UTF-8編碼。
您可以找到有關如何執行此操作的多個示例。例如考慮this或this other。
基本上,您需要在配置中的某處注冊過濾器。以所示示例之一為例:
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public FilterRegistrationBean<CharacterEncodingFilter> characterEncodingFilterRegistration() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8"); // use your preferred encoding
filter.setForceEncoding(true); // force the encoding
FilterRegistrationBean<CharacterEncodingFilter> registrationBean =
new FilterRegistrationBean<>(filter); // register the filter
registrationBean.addUrlPatterns("/*"); // set preferred url
return registrationBean;
}
事實上,這個注冊程序應該是由 Spring Boot 自動執行的HttpEncodingAutoConfiguration。請,對此的要求:
@Configuration(proxyBeanMethods=false)
@EnableConfigurationProperties(value=ServerProperties.class)
@ConditionalOnWebApplication(type=SERVLET)
@ConditionalOnClass(value=org.springframework.web.filter.CharacterEncodingFilter.class)
@ConditionalOnProperty(prefix="server.servlet.encoding",
value="enabled",
matchIfMissing=true)
如前所述,作為替代方案,嘗試調整server.servlet.encoding.*相關屬性,看看它是否有效:
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
您正在配置中使用該屬性的舊版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/405635.html
標籤:
下一篇:go中延遲函式的行為
