读取word内容乱码 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("GBK")));
时间: 2023-02-17 16:17:10 浏览: 115
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("GBK")));
这段代码创建了一个 BufferedReader 对象,并使用 InputStreamReader 和 Charset.forName("GBK") 将其包装在一个 InputStream 中。这意味着 BufferedReader 将从输入流(inputStream)读取数据,并使用 GBK 编码解码读取的数据。
GBK 是简体中文的一种常用编码方式,用于在计算机上表示中文文本。使用 GBK 编码可以确保在读取文本时不会出现乱码。
相关问题
能将以下kotlin代码转换成java吗 package com.blog.demo41 import android.os.Bundle import android.util.Log import android.view.View import android.widget.Button import com.blog.AbstractLoggerActivity import com.blog.R import com.blog.demo39.TAG import com.blog.support.logger.Logger import java.io.BufferedReader import java.io.IOException import java.io.InputStream import java.io.InputStreamReader class StrokeOrderActivity : AbstractLoggerActivity() { var svgSix: String? = null var svgOne: String? = null lateinit var strokeOrderView1: StrokeOrderView lateinit var strokeOrderView2: StrokeOrderView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_stroke_order_layout) initLoggerLayout() strokeOrderView1 = findViewById(R.id.stroke_order_view1) strokeOrderView2 = findViewById(R.id.stroke_order_view2) findViewById<Button>(R.id.btn_load_svg_six).setOnClickListener { val name = "张.json" // 需要将 svg.json 放在 assets 或特定路径下 svgSix = loadSvgFromAssets(name) showTips("加载$name ->$svgSix") svgSix?.let { showTips("start draw -> $name") strokeOrderView1.setStrokesBySvg(it) } } findViewById<Button>(R.id.btn_load_svg_one).setOnClickListener { val name = "張.json" svgOne = loadSvgFromAssets(name) showTips("加载$name ->$svgOne") svgOne?.let { showTips("start draw -> $name") strokeOrderView2.setStrokesBySvg(it) } } } private fun loadSvgFromAssets(name: String): String? { try { assets.list("data")?.let { for (s in it) { if (name == s) { Log.d("zuo", "svgName-> $s") return loadSvgJson("data/$s") ?: "NULL" } } } } catch (e: IOException) { e.printStackTrace() } return null } private fun loadSvgJson(file: String): String? { var reader: BufferedReader? = null var inputStreamReader: InputStreamReader? = null try { val inputStream: InputStream = assets.open(file) inputStreamReader = InputStreamReader(inputStream) reader = BufferedReader(inputStreamReader) var line: String? val entity = java.lang.StringBuilder() while (reader.readLine().also { line = it } != null) { entity.append(line) } return entity.toString() } catch (e: java.lang.Exception) { e.printStackTrace() } finally { try { inputStreamReader?.close() reader?.close() } catch (e: IOException) { e.printStackTrace() } } return null } private fun showTips(str: String) { Log.d(TAG, str) Logger.i(TAG, str) } }
可以,以下是转换后的Java代码:
```java
package com.blog.demo41;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import com.blog.R;
import com.blog.support.logger.Logger;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class StrokeOrderActivity extends AppCompatActivity {
private String svgSix = null;
private String svgOne = null;
private StrokeOrderView strokeOrderView1;
private StrokeOrderView strokeOrderView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stroke_order_layout);
initLoggerLayout();
strokeOrderView1 = findViewById(R.id.stroke_order_view1);
strokeOrderView2 = findViewById(R.id.stroke_order_view2);
findViewById(R.id.btn_load_svg_six).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = "张.json"; // 需要将 svg.json 放在 assets 或特定路径下
svgSix = loadSvgFromAssets(name);
showTips("加载" + name + " ->" + svgSix);
if (svgSix != null) {
showTips("start draw -> " + name);
strokeOrderView1.setStrokesBySvg(svgSix);
}
}
});
findViewById(R.id.btn_load_svg_one).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = "張.json";
svgOne = loadSvgFromAssets(name);
showTips("加载" + name + " ->" + svgOne);
if (svgOne != null) {
showTips("start draw -> " + name);
strokeOrderView2.setStrokesBySvg(svgOne);
}
}
});
}
private String loadSvgFromAssets(String name) {
try {
String[] list = getAssets().list("data");
if (list != null) {
for (String s : list) {
if (name.equals(s)) {
Log.d("zuo", "svgName-> " + s);
return loadSvgJson("data/" + s);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private String loadSvgJson(String file) {
BufferedReader reader = null;
InputStreamReader inputStreamReader = null;
try {
InputStream inputStream = getAssets().open(file);
inputStreamReader = new InputStreamReader(inputStream);
reader = new BufferedReader(inputStreamReader);
String line;
StringBuilder entity = new StringBuilder();
while ((line = reader.readLine()) != null) {
entity.append(line);
}
return entity.toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (inputStreamReader != null) {
inputStreamReader.close();
}
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
private void showTips(String str) {
Log.d("TAG", str);
Logger.i("TAG", str);
}
}
```
java.nio.charset.MalformedInputException: Input length = 2
这个错误通常是因为读取的文件的编码格式与实际编码格式不匹配导致的。在读取文件时,Java 默认使用 UTF-8 编码格式,但如果你的文件使用了其他编码格式,就会出现该错误。解决方法是指定正确的编码格式。可以在读取文件时使用 `InputStreamReader` 指定正确的编码格式,例如:
```java
InputStream inputStream = new FileInputStream("your_file.txt");
InputStreamReader streamReader = new InputStreamReader(inputStream, "your_encoding");
BufferedReader reader = new BufferedReader(streamReader);
String line = null;
while ((line = reader.readLine()) != null) {
// 处理文件内容
}
```
其中,`"your_encoding"` 指定你的文件使用的编码格式,例如 "UTF-8"、"GBK" 等。如果你不确定你的文件使用的编码格式,可以尝试使用其他编码格式进行尝试,或者使用文本编辑器打开文件查看编码格式。
如果你使用的是 Java 7 及以上版本,可以直接使用 `Files.newBufferedReader` 方法来读取文件,例如:
```java
BufferedReader reader = Files.newBufferedReader(Paths.get("your_file.txt"), Charset.forName("your_encoding"));
String line = null;
while ((line = reader.readLine()) != null) {
// 处理文件内容
}
```
其中,`"your_encoding"` 指定你的文件使用的编码格式,例如 "UTF-8"、"GBK" 等。
阅读全文