Java编程:解决字体编码问题全攻略

需积分: 20 7 下载量 129 浏览量 更新于2024-09-13 1 收藏 42KB DOC 举报
"Java中正确使用字体编码的关键在于理解不同环节的编码设置,并确保它们之间的一致性。Java支持多种字体编码,如UTF-8、ISO-8859-1和GBK等。在处理中文字符时,涉及的因素包括数据库连接方式、网页编码、数据库存储编码以及Java应用程序的默认编码。 1. 数据库连接方式:对于使用UTF-8编码的数据库,连接字符串应包含`useUnicode=true&characterEncoding=UTF-8`参数,以确保从数据库读取的中文数据能正确解析。 2. 网页编码:JSP页面需要明确指定其使用的字符编码,通常通过`<meta charset="UTF-8">`或`contentType="text/html;charset=UTF-8"`来设定。当从网页读取中文数据并存入数据库时,需确保网页提交的数据编码与数据库接收的编码一致。 3. 数据库中存储数据的编码:数据库本身的编码设置也很重要,例如MySQL可以设置为UTF-8或GBK。数据插入时,若不匹配数据库的编码,会导致乱码。 4. Java的默认字体编码:Java程序的默认编码取决于JVM的区域设置。可以通过`System.getProperty("file.encoding")`查看。如果需要,可以在程序启动时通过`-Dfile.encoding=UTF-8`这样的命令行参数来改变。 5. JSP处理中文:JSP从数据库读取数据时,需确保JDBC的`ResultSet`对象正确设置编码,例如`rs.setEncoding("UTF-8")`。在显示数据时,确保JSP页面的编码与读取数据时的编码一致。 6. JSP接收用户输入:在JSP中,`<form>`标签的`accept-charset`属性应设置为与服务器端处理请求时使用的编码相同,以保证数据提交时不发生乱码。 7. 纯Java类文件处理:Java源代码文件的编码应与IDE设置一致,通常推荐使用UTF-8。在读写文件时,使用`FileReader`和`FileWriter`时要指定正确的编码,如`new FileReader(file, "UTF-8")`。 8. 汉字编码转换:在必要时,可以使用Java的`java.nio.charset`包中的`Charset`类进行编码转换,例如`String transcoded = new String(original.getBytes("GBK"), "UTF-8")`。 9. 日志和输出流编码:确保控制台输出和日志文件的编码设置正确,避免中文字符输出为乱码。 解决Java中的字体编码问题需要全局考虑整个系统的编码流程,确保每个环节的编码设置协调一致。理解这些关键点,就能有效地避免在处理中文字符时遇到的困扰。"
2009-11-11 上传
import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.font.*; public class Clipping extends Canvas { public Clipping() { setBackground(Color.white); } public void paint(Graphics g) { Graphics2D g2; g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); int w = getSize().width; int h = getSize().height; FontRenderContext frc = g2.getFontRenderContext(); Font f = new Font("Helvetica",Font.BOLD,w/8); String s = new String("By"); TextLayout tl = new TextLayout(s, f, frc); float sw = (float) tl.getBounds().getWidth(); AffineTransform transform = new AffineTransform(); transform.setToTranslation(w/2-sw/2,h/2); Shape shape = tl.getOutline(transform); g2.setClip(shape); g2.setColor(Color.blue); g2.fill(shape.getBounds()); g2.setColor(Color.yellow); for (int j = shape.getBounds().y; j < shape.getBounds().y + shape.getBounds().height; j=j+3) { Line2D line = new Line2D.Float( 0.0f, (float) j, (float) w, (float) j); g2.draw(line); } } public static void main(String s[]) { WindowListener l = new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} public void windowClosed(WindowEvent e) {System.exit(0);} }; Frame f = new Frame("2D Text"); f.addWindowListener(l); f.add("Center", new Clipping()); f.pack(); f.setSize(new Dimension(400, 300)); f.show(); } } *********************************************