问题描述
- android输出语句乱码,怎么改
-
public class MainActivity extends Activity {
private EditText fileName;
private EditText content;
private TextView textContent;
private static final String TAG = "simplefile";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fileName = (EditText) this.findViewById(R.id.fileName);
content = (EditText) this.findViewById(R.id.content);
textContent = (TextView) this.findViewById(R.id.textContent);
Button saveBtn = (Button)this.findViewById(R.id.saveButton);
Button viewBtn = (Button)this.findViewById(R.id.viewButton);saveBtn.setOnClickListener(listener);//保存按钮事件监听
viewBtn.setOnClickListener(listener);//查看按钮事件监听
}private View.OnClickListener listener = new View.OnClickListener(){ public void onClick(View v) {
// TODO Auto-generated method stub
Button button = (Button) v;
String nameStr = fileName.getText().toString().trim();
String contentStr = content.getText().toString();switch(button.getId())
{
case R.id.saveButton :
int resId_s = R.string.success;
OutputStream fileOS = null;
try {fileOS = MainActivity.this.openFileOutput(nameStr+".txt",
Context.MODE_APPEND);
fileOS.write(contentStr.getBytes());
fileOS.close();} catch (Exception e) { resId_s = R.string.failure; e.printStackTrace(); } //界面提示 Toast.makeText(MainActivity.this, resId_s, Toast.LENGTH_LONG).show(); Log.i(TAG, nameStr); Log.i(TAG, contentStr); break; case R.id.viewButton : int resId_v = R.string.readSucc; InputStream fileIS = null; String contentSt = null; try { fileIS = MainActivity.this.openFileInput(nameStr+".txt"); ByteArrayOutputStream oStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while((len = fileIS.read(buffer)) != -1){ oStream.write(buffer, 0, len); } contentSt = oStream.toString("GBK"); //contentSt = oStream.toString(); oStream.close(); fileIS.close(); } catch (Exception e) { resId_v = R.string.readFail; e.printStackTrace(); return; } textContent.setText(contentSt); Log.i(TAG, contentSt); Toast.makeText(MainActivity.this, resId_v, Toast.LENGTH_LONG).show(); Log.i(TAG, nameStr); break; } } }; }
解决方案
http://blog.csdn.net/wannshan/article/details/7221329
解决方案二:
我运行了你的代码。
这句代码contentSt = oStream.toString("GBK"); 你以GBK编码方式读取流的内容,但是,你写入时是以什么方式编码的呢?
我猜测默认是utf-8编码,于是把contentSt = oStream.toString("GBK"); 改为contentSt = oStream.toString("utf-8"); 输出正确的数据。