Lỗi chữ tiếng Việt khi in ra bị "?" ở những chữ cái có dấu tiếng Việt

Cảm ơn bạn nhiều, nếu mà in đc Tiếng Việt trực tiếp trên VS Code thì tốt, nhưng mà được vậy là ổn rồi.
Chứ nếu test code liên tục mà cứ copy paste mấy cái lệnh thì hơi mệt xíu :laughing:

muốn code trên vscode thì install thêm cái plugin Maven for Java gì đấy rồi tạo project bằng Maven mà chạy :V
image


Install Apache Maven

https://maven.apache.org/download.cgi tải “Binary zip archive” rồi giải nén ra, để ở đâu đó ví dụ D:\Maven. Giải nén xong cho D:\Maven\bin vào PATH để chạy lệnh mvn trên terminal được.

Tạo project bằng Maven

làm theo tutorial của Maven chạy lỗi tùm lum :V mình thấy lệnh này chạy được:

mvn archetype:generate -DgroupId=main -DartifactId=002 -DinteractiveMode=false

nó sẽ tạo project mới có tên là 002, có cấu trúc:

D:\PROG\JAVA\TEST\002
│   pom.xml
│
└───src
    ├───main
    │   └───java
    │       └───main
    │               App.java
    │
    └───test
        └───java
            └───main
                    AppTest.java

nó tạo sẵn cái App.java rồi thì khỏi xài ChuongTrinhDauTien.java nữa vậy :V
cái AppTest kia nó tạo sẵn thì tốt, hiện giờ chưa xài thì kệ nó :V :V

Tạo VS Code workspace

vô thư mục 002, tạo thư mục .vscode rồi tạo file 002.code-workspace trong đó:

D:\PROG\JAVA\TEST\002
│   pom.xml
│
├───.vscode
│       002.code-workspace
│
...

nội dung của 002.code-workspace

{
	"folders": [
		{
			"path": ".."
		}
	]
}

rồi double click mở file này lên bằng VS Code, chọn “Always open with this app” luôn, lần sau mở project chỉ cần double click vô file .code-workspace này là được

Thêm encoding, dependency cho project

mở file pom.xml, thêm jna dependency này vào:

  <dependencies>
    ...
    <dependency>
      <groupId>net.java.dev.jna</groupId>
      <artifactId>jna</artifactId>
      <version>5.11.0</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

thêm encoding utf8 cho project:

<project ...>
  ...
  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
</project>

nếu xài Java “cũ” 1.7 thì ko cần thêm cái compile source/target kia, ở đây mình lỡ install Java 17 nên phải có thêm 2 dòng này :V :V Tại vì compile bằng lệnh mvn compile mặc định nó pass -source 1.5-target 1.5 vào javac, mà Java 17 nó ko chịu 1.5 :V tối thiểu phải là 1.7 gì đấy, kệ quất 17 luôn =] Nếu viết project cho người khác compile thì nên để 1.7 được rồi :V

nội dung đầy đủ của file pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>main</groupId>
  <artifactId>002</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>002</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>net.java.dev.jna</groupId>
      <artifactId>jna</artifactId>
      <version>5.11.0</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
</project>

sửa xong file pom.xml này thì mở PowerShell lên lại, cd tới thư mục root của project (D:\PROG\JAVA\TEST\002) rồi chạy lệnh

mvn clean install

để nó update những thay đổi trong file pom.xml

Thêm file Console.java

thêm file console\windows\Console.java trong thư mục src\main\java, phải tạo thêm folder console\windows cho đúng cái tên package console.windows :V

D:\PROG\JAVA\TEST\002
│   pom.xml
│
├───.vscode
│       002.code-workspace
│
└───src
    ├───main
    │   └───java
    │       ├───console
    │       │   └───windows
    │       │           Console.java
    │       │
    │       └───main
    │               App.java
    │
    └───test
        └───java
            └───main
                    AppTest.java

nội dung Console.java(vẫn như cũ, chỉ có sửa tên hàm println lại thành WriteLine :V :V

package console.windows;

import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.win32.StdCallLibrary;

/**
 * For unicode output on windows platform
 * 
 * @author Sandy_Yin
 *
 */

public class Console {
    private static Kernel32 INSTANCE = null;

    public interface Kernel32 extends StdCallLibrary {
        public Pointer GetStdHandle(int nStdHandle);

        public boolean WriteConsoleW(Pointer hConsoleOutput, char[] lpBuffer,
                int nNumberOfCharsToWrite,
                IntByReference lpNumberOfCharsWritten, Pointer lpReserved);
    }

    static {
        String os = System.getProperty("os.name").toLowerCase();
        if (os.startsWith("win")) {
            INSTANCE = (Kernel32) Native.load("kernel32", Kernel32.class);
        }
    }

    public static void WriteLine(String message) {
        boolean successful = false;
        if (INSTANCE != null) {
            Pointer handle = INSTANCE.GetStdHandle(-11);
            char[] buffer = message.toCharArray();
            IntByReference lpNumberOfCharsWritten = new IntByReference();
            successful = INSTANCE.WriteConsoleW(handle, buffer, buffer.length, lpNumberOfCharsWritten, null);
            if (successful)
                System.out.println();
        }
        if (!successful)
            System.out.println(message);
    }
}

Run | Debug

nội dung file App.java:

package main;

import console.windows.*;

public class App {
    public static void main(String[] args) {
        Console.WriteLine("Xin chào các bạn!");
        Console.WriteLine("Xin chào mọi người!");
    }
}

bấm F5 là debug ngon lành ko cần thêm gì cả :V

hay click vô Run | Debug gì ở ngay hàm main cũng được :V
image

4 Likes

help, nó lại bị lỗi tiếp này :vv
https://imgur.com/a/t1DAn0d
Nó còn nói hai cái file đó non-project gì nữa đó :v
Mong bạn giúp :smiley:

1 Like

à quên sửa file pom.xml xong thì phải ra ngoài gõ mvn clean install lại nữa :V

cd tới thư mục của project (D:\PROG\JAVA\TEST\002), gõ mvn clean install là được :V để thêm vô cái hướng dẫn kia :V :V

3 Likes

nó bị lỗi Console cannot be resolved gì đó á bạn :frowning: (lỗi tiếp)

vô daynhauhoc’s discord đi sửa lỗi lẹ hơn :V rồi post solution vô đây, ở đây cứ 1 ngày sửa 1 lỗi lâu quá :V

4 Likes

update có hình :V

mở powershell, gõ lệnh

mvn archetype:generate -DgroupId=main -DartifactId=004 -DinteractiveMode=false

ở đây 004 là tên project

tiếp theo tạo code-workspace:

cd 004
md .vscode
New-Item .vscode\004.code-workspace -ItemType File -Value '{"folders":[{"path": ".."}]}'
code .vscode\004.code-workspace

mở vscode lên rồi thì tắt powershell ở ngoài đi, xài powershell ở trong vscode :V

mở file App.java lên, xem có thấy dòng Run|Debug kia ko


nếu ko thì install 3 cái extensions này:
image

thấy Run|Debug rồi thì bấm vào Run chạy cho nó in ra Hello World

chạy được rồi thì mở file pom.xml lên để thêm encoding, jna dependency vào :V

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>main</groupId>
  <artifactId>004</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>004</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>net.java.dev.jna</groupId>
      <artifactId>jna</artifactId>
      <version>5.11.0</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
</project>

save lại thì sẽ thấy vscode nó hiện lên thông báo có muốn sync config mới ko, bấm Now hoặc Always là nó tự động config lại cho mình, khỏi cần gõ mvn clean install


nếu thấy có dòng

thì sửa lại compiler source và target cho đúng version của Java compiler, ở đây là 17 thay vì 1.7 :V
image

qua tab Terminal của vscode, tạo file Console.java:

md src/main/java/console/windows
New-Item src/main/java/console/windows/Console.java -ItemType File

copy nội dung file Console.javaApp.java ở trên vào rồi chạy là được

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?