为了账号安全,请及时绑定邮箱和手机立即绑定

中文验证码图片乱码

如果生成的含有中文验证码的图片乱码需要按以下方式修改吗?还是只要添加几行代码修改一下就行?

  1. 确认%JavaHome%/jre/lib/fonts目录下存在zysong.ttf,如果不存在,可以将windows下的C:\WINDOWS\Fonts\simsun.ttc复制到此目录,然后改名为zysong.ttf。
    2.在%JavaHome%/jre/lib/fonts目录下执行"ttmkfdir -o fonts.dir"命令,重新生成fonts.dir文件,如没有此命令,请执行:sudo apt-get install ttmkfdir。
    3.确认/usr/share/fonts/zh_CN/TrueType目录存在,如果不存在则mkdir创建
    4.确认/usr/share/fonts/zh_CN/TrueType目录下存在zysong.ttf
    5.在%JavaHome%/jre/lib目录下,执行 cp fontconfig.RedHat.3.properties.src fontconfig.properties
    6.重新启动tomcat

    http://img1.sycdn.imooc.com//56af48df0001967b05120097.jpg

    其实图片上应为“网验”二字,但是乱码只看到了“网”字

    这部分源代码(下载此课程的源代码):

  2. package com.imooc.kaptcha;


  3. import java.util.Random;


  4. public class ChineseText extends Configurable implements TextProducer {


  • public String getText() {

  • int length = getConfig().getTextProducerCharLength();

  • //char[] charS = getConfig().getTextProducerCharString();

  • String[] s = new String[]{"慕","课","网","教","程","验","证","码","实","例"};


  • Random rand = new Random();

  • StringBuffer sb = new StringBuffer();

  • for(int i = 0; i < length; i++){

  • int ind = rand.nextInt(s.length);

  • sb.append(s[ind]);

  • }

  • return sb.toString();

  • }

  1. /**

  2. * 中文实例

  3. * @return

  4. */

  5. public String getText1() {

  6. int length = getConfig().getTextProducerCharLength();

  7. String finalWord = "", firstWord = "";

  8. int tempInt = 0;

  9. String[] array = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",

  10. "a", "b", "c", "d", "e", "f" };


  11. Random rand = new Random();


  12. for (int i = 0; i < length; i++) {

  13. switch (rand.nextInt(array.length)) {

  14. case 1:

  15. tempInt = rand.nextInt(26) + 65;

  16. firstWord = String.valueOf((char) tempInt);

  17. break;

  18. case 2:

  19. int r1,

  20. r2,

  21. r3,

  22. r4;

  23. String strH,

  24. strL;// high&low

  25. r1 = rand.nextInt(3) + 11; // 前闭后开[11,14)

  26. if (r1 == 13) {

  27. r2 = rand.nextInt(7);

  28. } else {

  29. r2 = rand.nextInt(16);

  30. }


  31. r3 = rand.nextInt(6) + 10;

  32. if (r3 == 10) {

  33. r4 = rand.nextInt(15) + 1;

  34. } else if (r3 == 15) {

  35. r4 = rand.nextInt(15);

  36. } else {

  37. r4 = rand.nextInt(16);

  38. }


  39. strH = array[r1] + array[r2];

  40. strL = array[r3] + array[r4];


  41. byte[] bytes = new byte[2];

  42. bytes[0] = (byte) (Integer.parseInt(strH, 16));

  43. bytes[1] = (byte) (Integer.parseInt(strL, 16));


  44. firstWord = new String(bytes);

  45. break;

  46. default:

  47. tempInt = rand.nextInt(10) + 48;

  48. firstWord = String.valueOf((char) tempInt);

  49. break;

  50. }

  51. finalWord += firstWord;

  52. }

  53. return finalWord;

  54. }

  55. }

正在回答

举报

0/150
提交
取消
Java实现验证码制作
  • 参与学习       59907    人
  • 解答问题       128    个

本教程就会带大家学习使用java实现各种验证码的方法

进入课程

中文验证码图片乱码

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信