Heroku 应用程序不显示使用 UTF-8 作为默认编码的西里尔字符
Heroku app does not display Cyrillic characters with UTF-8 as default encoding
我正在关注 this Baeldung tutorial,虽然语言更改正确,但每当我尝试更改为基于西里尔文的语言(保加利亚语、俄语)时,字符只是问号。我在 Heroku 上托管我的应用程序。
我已经尝试在 Heroku CLI 中执行 heroku config:add LANG=en_US.UTF-8
但没有效果。
这是我的 LocaleResolver
、ReloadableResourceBundleMessageSource
、LocaleChangeInterceptor
和覆盖的 addInterceptors 方法的代码
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
我希望收到“Добре дошъл”(保加利亚语欢迎),但我只收到了????????相反。
编辑 1
添加 Heroku Locale Buildpack 后,当我尝试将我的应用程序部署到 Heroku 时出现以下错误:
-----> Locale app detected
cat: /tmp/build_1406e9f58f41cacf3931deb52b55d687/.locales: No such file or
directory
! Push rejected, failed to compile Locale app.
! Push failed
如果您已经安装了语言环境 buildpack,请转到 Heroku 应用程序的设置,删除您创建的 .locales
文件和 buildpack。
我通过在我的 application.properties
文件中应用以下设置解决了这个问题:
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
此外,请注意,应用这些设置后的第一次构建可能会特别慢 - 如果您在 Eclipse 中构建并且习惯于在大约 1 分钟内构建您的 Heroku 应用程序,请注意这可能会接管5 分钟构建。
我正在关注 this Baeldung tutorial,虽然语言更改正确,但每当我尝试更改为基于西里尔文的语言(保加利亚语、俄语)时,字符只是问号。我在 Heroku 上托管我的应用程序。
我已经尝试在 Heroku CLI 中执行 heroku config:add LANG=en_US.UTF-8
但没有效果。
这是我的 LocaleResolver
、ReloadableResourceBundleMessageSource
、LocaleChangeInterceptor
和覆盖的 addInterceptors 方法的代码
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
我希望收到“Добре дошъл”(保加利亚语欢迎),但我只收到了????????相反。
编辑 1 添加 Heroku Locale Buildpack 后,当我尝试将我的应用程序部署到 Heroku 时出现以下错误:
-----> Locale app detected
cat: /tmp/build_1406e9f58f41cacf3931deb52b55d687/.locales: No such file or
directory
! Push rejected, failed to compile Locale app.
! Push failed
如果您已经安装了语言环境 buildpack,请转到 Heroku 应用程序的设置,删除您创建的 .locales
文件和 buildpack。
我通过在我的 application.properties
文件中应用以下设置解决了这个问题:
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
此外,请注意,应用这些设置后的第一次构建可能会特别慢 - 如果您在 Eclipse 中构建并且习惯于在大约 1 分钟内构建您的 Heroku 应用程序,请注意这可能会接管5 分钟构建。